{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {
    "_cell_guid": "ea25cdf7-bdbc-3cf1-0737-bc51675e3374",
    "_uuid": "fed5696c67bf55a553d6d04313a77e8c617cad99"
   },
   "source": [
    "# Titanic Data Science Solutions\n",
    "\n",
    "---\n",
    "\n",
    "### I have released a new Python package [Speedml](https://speedml.com) which codifies the techniques used in this notebook into an intuitive, powerful, and productive API. \n",
    "\n",
    "### Speedml helps me jump from low 80% on the Kaggle leaderboard to high 20% within few iterations.\n",
    "\n",
    "### One more thing... Speedml achieves this with nearly 70% fewer lines of code!\n",
    "\n",
    "### Run and download the [Titanic Solution using Speedml](https://github.com/Speedml/notebooks/blob/master/titanic/titanic-solution-using-speedml.ipynb).\n",
    "\n",
    "---\n",
    "\n",
    "This notebook is a companion to the book [Data Science Solutions](https://www.amazon.com/Data-Science-Solutions-Startup-Workflow/dp/1520545312). The notebook walks us through a typical workflow for solving data science competitions at sites like Kaggle.\n",
    "\n",
    "There are several excellent notebooks to study data science competition entries. However many will skip some of the explanation on how the solution is developed as these notebooks are developed by experts for experts. The objective of this notebook is to follow a step-by-step workflow, explaining each step and rationale for every decision we take during solution development.\n",
    "\n",
    "## Workflow stages\n",
    "\n",
    "The competition solution workflow goes through seven stages described in the Data Science Solutions book.\n",
    "\n",
    "1. Question or problem definition.\n",
    "2. Acquire training and testing data.\n",
    "3. Wrangle, prepare, cleanse the data.\n",
    "4. Analyze, identify patterns, and explore the data.\n",
    "5. Model, predict and solve the problem.\n",
    "6. Visualize, report, and present the problem solving steps and final solution.\n",
    "7. Supply or submit the results.\n",
    "\n",
    "The workflow indicates general sequence of how each stage may follow the other. However there are use cases with exceptions.\n",
    "\n",
    "- We may combine mulitple workflow stages. We may analyze by visualizing data.\n",
    "- Perform a stage earlier than indicated. We may analyze data before and after wrangling.\n",
    "- Perform a stage multiple times in our workflow. Visualize stage may be used multiple times.\n",
    "- Drop a stage altogether. We may not need supply stage to productize or service enable our dataset for a competition.\n",
    "\n",
    "\n",
    "## Question and problem definition\n",
    "\n",
    "Competition sites like Kaggle define the problem to solve or questions to ask while providing the datasets for training your data science model and testing the model results against a test dataset. The question or problem definition for Titanic Survival competition is [described here at Kaggle](https://www.kaggle.com/c/titanic).\n",
    "\n",
    "> Knowing from a training set of samples listing passengers who survived or did not survive the Titanic disaster, can our model determine based on a given test dataset not containing the survival information, if these passengers in the test dataset survived or not.\n",
    "\n",
    "We may also want to develop some early understanding about the domain of our problem. This is described on the [Kaggle competition description page here](https://www.kaggle.com/c/titanic). Here are the highlights to note.\n",
    "\n",
    "- On April 15, 1912, during her maiden voyage, the Titanic sank after colliding with an iceberg, killing 1502 out of 2224 passengers and crew. Translated 32% survival rate.\n",
    "- One of the reasons that the shipwreck led to such loss of life was that there were not enough lifeboats for the passengers and crew.\n",
    "- Although there was some element of luck involved in surviving the sinking, some groups of people were more likely to survive than others, such as women, children, and the upper-class.\n",
    "\n",
    "## Workflow goals\n",
    "\n",
    "The data science solutions workflow solves for seven major goals.\n",
    "\n",
    "**Classifying.** We may want to classify or categorize our samples. We may also want to understand the implications or correlation of different classes with our solution goal.\n",
    "\n",
    "**Correlating.** One can approach the problem based on available features within the training dataset. Which features within the dataset contribute significantly to our solution goal? Statistically speaking is there a [correlation](https://en.wikiversity.org/wiki/Correlation) among a feature and solution goal? As the feature values change does the solution state change as well, and visa-versa? This can be tested both for numerical and categorical features in the given dataset. We may also want to determine correlation among features other than survival for subsequent goals and workflow stages. Correlating certain features may help in creating, completing, or correcting features.\n",
    "\n",
    "**Converting.** For modeling stage, one needs to prepare the data. Depending on the choice of model algorithm one may require all features to be converted to numerical equivalent values. So for instance converting text categorical values to numeric values.\n",
    "\n",
    "**Completing.** Data preparation may also require us to estimate any missing values within a feature. Model algorithms may work best when there are no missing values.\n",
    "\n",
    "**Correcting.** We may also analyze the given training dataset for errors or possibly innacurate values within features and try to corrent these values or exclude the samples containing the errors. One way to do this is to detect any outliers among our samples or features. We may also completely discard a feature if it is not contribting to the analysis or may significantly skew the results.\n",
    "\n",
    "**Creating.** Can we create new features based on an existing feature or a set of features, such that the new feature follows the correlation, conversion, completeness goals.\n",
    "\n",
    "**Charting.** How to select the right visualization plots and charts depending on nature of the data and the solution goals."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "_cell_guid": "56a3be4e-76ef-20c6-25e8-da16147cf6d7",
    "_uuid": "960f8b1937dc4915ce1eb0f82614b1985c4321a4"
   },
   "source": [
    "## Refactor Release 2017-Jan-29\n",
    "\n",
    "We are significantly refactoring the notebook based on (a) comments received by readers, (b) issues in porting notebook from Jupyter kernel (2.7) to Kaggle kernel (3.5), and (c) review of few more best practice kernels.\n",
    "\n",
    "### User comments\n",
    "\n",
    "- Combine training and test data for certain operations like converting titles across dataset to numerical values. (thanks @Sharan Naribole)\n",
    "- Correct observation - nearly 30% of the passengers had siblings and/or spouses aboard. (thanks @Reinhard)\n",
    "- Correctly interpreting logistic regresssion coefficients. (thanks @Reinhard)\n",
    "\n",
    "### Porting issues\n",
    "\n",
    "- Specify plot dimensions, bring legend into plot.\n",
    "\n",
    "\n",
    "### Best practices\n",
    "\n",
    "- Performing feature correlation analysis early in the project.\n",
    "- Using multiple plots instead of overlays for readability."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {
    "_cell_guid": "5767a33c-8f18-4034-e52d-bf7a8f7d8ab8",
    "_uuid": "847a9b3972a6be2d2f3346ff01fea976d92ecdb6",
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "# data analysis and wrangling\n",
    "import pandas as pd\n",
    "import numpy as np\n",
    "import random as rnd\n",
    "\n",
    "# visualization\n",
    "import seaborn as sns\n",
    "import matplotlib.pyplot as plt\n",
    "%matplotlib inline\n",
    "\n",
    "# machine learning\n",
    "from sklearn.linear_model import LogisticRegression\n",
    "from sklearn.svm import SVC, LinearSVC\n",
    "from sklearn.ensemble import RandomForestClassifier\n",
    "from sklearn.neighbors import KNeighborsClassifier\n",
    "from sklearn.naive_bayes import GaussianNB\n",
    "from sklearn.linear_model import Perceptron\n",
    "from sklearn.linear_model import SGDClassifier\n",
    "from sklearn.tree import DecisionTreeClassifier"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "_cell_guid": "6b5dc743-15b1-aac6-405e-081def6ecca1",
    "_uuid": "2d307b99ee3d19da3c1cddf509ed179c21dec94a"
   },
   "source": [
    "## Acquire data\n",
    "\n",
    "The Python Pandas packages helps us work with our datasets. We start by acquiring the training and testing datasets into Pandas DataFrames. We also combine these datasets to run certain operations on both datasets together."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {
    "_cell_guid": "e7319668-86fe-8adc-438d-0eef3fd0a982",
    "_uuid": "13f38775c12ad6f914254a08f0d1ef948a2bd453",
    "collapsed": false
   },
   "outputs": [],
   "source": [
    "train_df = pd.read_csv('train.csv')\n",
    "test_df = pd.read_csv('test.csv')\n",
    "combine = [train_df, test_df]"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "_cell_guid": "3d6188f3-dc82-8ae6-dabd-83e28fcbf10d",
    "_uuid": "79282222056237a52bbbb1dbd831f057f1c23d69"
   },
   "source": [
    "## Analyze by describing data\n",
    "\n",
    "Pandas also helps describe the datasets answering following questions early in our project.\n",
    "\n",
    "**Which features are available in the dataset?**\n",
    "\n",
    "Noting the feature names for directly manipulating or analyzing these. These feature names are described on the [Kaggle data page here](https://www.kaggle.com/c/titanic/data)."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {
    "_cell_guid": "ce473d29-8d19-76b8-24a4-48c217286e42",
    "_uuid": "ef106f38a00e162a80c523778af6dcc778ccc1c2",
    "collapsed": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "['PassengerId' 'Survived' 'Pclass' 'Name' 'Sex' 'Age' 'SibSp' 'Parch'\n",
      " 'Ticket' 'Fare' 'Cabin' 'Embarked']\n"
     ]
    }
   ],
   "source": [
    "print(train_df.columns.values)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "_cell_guid": "cd19a6f6-347f-be19-607b-dca950590b37",
    "_uuid": "1d7acf42af29a63bc038f14eded24e8b8146f541"
   },
   "source": [
    "**Which features are categorical?**\n",
    "\n",
    "These values classify the samples into sets of similar samples. Within categorical features are the values nominal, ordinal, ratio, or interval based? Among other things this helps us select the appropriate plots for visualization.\n",
    "\n",
    "- Categorical: Survived, Sex, and Embarked. Ordinal: Pclass.\n",
    "\n",
    "**Which features are numerical?**\n",
    "\n",
    "Which features are numerical? These values change from sample to sample. Within numerical features are the values discrete, continuous, or timeseries based? Among other things this helps us select the appropriate plots for visualization.\n",
    "\n",
    "- Continous: Age, Fare. Discrete: SibSp, Parch."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {
    "_cell_guid": "8d7ac195-ac1a-30a4-3f3f-80b8cf2c1c0f",
    "_uuid": "e068cd3a0465b65a0930a100cb348b9146d5fd2f",
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>PassengerId</th>\n",
       "      <th>Survived</th>\n",
       "      <th>Pclass</th>\n",
       "      <th>Name</th>\n",
       "      <th>Sex</th>\n",
       "      <th>Age</th>\n",
       "      <th>SibSp</th>\n",
       "      <th>Parch</th>\n",
       "      <th>Ticket</th>\n",
       "      <th>Fare</th>\n",
       "      <th>Cabin</th>\n",
       "      <th>Embarked</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>3</td>\n",
       "      <td>Braund, Mr. Owen Harris</td>\n",
       "      <td>male</td>\n",
       "      <td>22.0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>A/5 21171</td>\n",
       "      <td>7.2500</td>\n",
       "      <td>NaN</td>\n",
       "      <td>S</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>2</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>Cumings, Mrs. John Bradley (Florence Briggs Th...</td>\n",
       "      <td>female</td>\n",
       "      <td>38.0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>PC 17599</td>\n",
       "      <td>71.2833</td>\n",
       "      <td>C85</td>\n",
       "      <td>C</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>3</td>\n",
       "      <td>1</td>\n",
       "      <td>3</td>\n",
       "      <td>Heikkinen, Miss. Laina</td>\n",
       "      <td>female</td>\n",
       "      <td>26.0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>STON/O2. 3101282</td>\n",
       "      <td>7.9250</td>\n",
       "      <td>NaN</td>\n",
       "      <td>S</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>4</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>Futrelle, Mrs. Jacques Heath (Lily May Peel)</td>\n",
       "      <td>female</td>\n",
       "      <td>35.0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>113803</td>\n",
       "      <td>53.1000</td>\n",
       "      <td>C123</td>\n",
       "      <td>S</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>5</td>\n",
       "      <td>0</td>\n",
       "      <td>3</td>\n",
       "      <td>Allen, Mr. William Henry</td>\n",
       "      <td>male</td>\n",
       "      <td>35.0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>373450</td>\n",
       "      <td>8.0500</td>\n",
       "      <td>NaN</td>\n",
       "      <td>S</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   PassengerId  Survived  Pclass  \\\n",
       "0            1         0       3   \n",
       "1            2         1       1   \n",
       "2            3         1       3   \n",
       "3            4         1       1   \n",
       "4            5         0       3   \n",
       "\n",
       "                                                Name     Sex   Age  SibSp  \\\n",
       "0                            Braund, Mr. Owen Harris    male  22.0      1   \n",
       "1  Cumings, Mrs. John Bradley (Florence Briggs Th...  female  38.0      1   \n",
       "2                             Heikkinen, Miss. Laina  female  26.0      0   \n",
       "3       Futrelle, Mrs. Jacques Heath (Lily May Peel)  female  35.0      1   \n",
       "4                           Allen, Mr. William Henry    male  35.0      0   \n",
       "\n",
       "   Parch            Ticket     Fare Cabin Embarked  \n",
       "0      0         A/5 21171   7.2500   NaN        S  \n",
       "1      0          PC 17599  71.2833   C85        C  \n",
       "2      0  STON/O2. 3101282   7.9250   NaN        S  \n",
       "3      0            113803  53.1000  C123        S  \n",
       "4      0            373450   8.0500   NaN        S  "
      ]
     },
     "execution_count": 8,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# preview the data\n",
    "train_df.head()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "_cell_guid": "97f4e6f8-2fea-46c4-e4e8-b69062ee3d46",
    "_uuid": "c34fa51a38336d97d5f6a184908cca37daebd584"
   },
   "source": [
    "**Which features are mixed data types?**\n",
    "\n",
    "Numerical, alphanumeric data within same feature. These are candidates for correcting goal.\n",
    "\n",
    "- Ticket is a mix of numeric and alphanumeric data types. Cabin is alphanumeric.\n",
    "\n",
    "**Which features may contain errors or typos?**\n",
    "\n",
    "This is harder to review for a large dataset, however reviewing a few samples from a smaller dataset may just tell us outright, which features may require correcting.\n",
    "\n",
    "- Name feature may contain errors or typos as there are several ways used to describe a name including titles, round brackets, and quotes used for alternative or short names."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {
    "_cell_guid": "f6e761c2-e2ff-d300-164c-af257083bb46",
    "_uuid": "3488e80f309d29f5b68bbcfaba8d78da84f4fb7d",
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>PassengerId</th>\n",
       "      <th>Survived</th>\n",
       "      <th>Pclass</th>\n",
       "      <th>Name</th>\n",
       "      <th>Sex</th>\n",
       "      <th>Age</th>\n",
       "      <th>SibSp</th>\n",
       "      <th>Parch</th>\n",
       "      <th>Ticket</th>\n",
       "      <th>Fare</th>\n",
       "      <th>Cabin</th>\n",
       "      <th>Embarked</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>886</th>\n",
       "      <td>887</td>\n",
       "      <td>0</td>\n",
       "      <td>2</td>\n",
       "      <td>Montvila, Rev. Juozas</td>\n",
       "      <td>male</td>\n",
       "      <td>27.0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>211536</td>\n",
       "      <td>13.00</td>\n",
       "      <td>NaN</td>\n",
       "      <td>S</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>887</th>\n",
       "      <td>888</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>Graham, Miss. Margaret Edith</td>\n",
       "      <td>female</td>\n",
       "      <td>19.0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>112053</td>\n",
       "      <td>30.00</td>\n",
       "      <td>B42</td>\n",
       "      <td>S</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>888</th>\n",
       "      <td>889</td>\n",
       "      <td>0</td>\n",
       "      <td>3</td>\n",
       "      <td>Johnston, Miss. Catherine Helen \"Carrie\"</td>\n",
       "      <td>female</td>\n",
       "      <td>NaN</td>\n",
       "      <td>1</td>\n",
       "      <td>2</td>\n",
       "      <td>W./C. 6607</td>\n",
       "      <td>23.45</td>\n",
       "      <td>NaN</td>\n",
       "      <td>S</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>889</th>\n",
       "      <td>890</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>Behr, Mr. Karl Howell</td>\n",
       "      <td>male</td>\n",
       "      <td>26.0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>111369</td>\n",
       "      <td>30.00</td>\n",
       "      <td>C148</td>\n",
       "      <td>C</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>890</th>\n",
       "      <td>891</td>\n",
       "      <td>0</td>\n",
       "      <td>3</td>\n",
       "      <td>Dooley, Mr. Patrick</td>\n",
       "      <td>male</td>\n",
       "      <td>32.0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>370376</td>\n",
       "      <td>7.75</td>\n",
       "      <td>NaN</td>\n",
       "      <td>Q</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "     PassengerId  Survived  Pclass                                      Name  \\\n",
       "886          887         0       2                     Montvila, Rev. Juozas   \n",
       "887          888         1       1              Graham, Miss. Margaret Edith   \n",
       "888          889         0       3  Johnston, Miss. Catherine Helen \"Carrie\"   \n",
       "889          890         1       1                     Behr, Mr. Karl Howell   \n",
       "890          891         0       3                       Dooley, Mr. Patrick   \n",
       "\n",
       "        Sex   Age  SibSp  Parch      Ticket   Fare Cabin Embarked  \n",
       "886    male  27.0      0      0      211536  13.00   NaN        S  \n",
       "887  female  19.0      0      0      112053  30.00   B42        S  \n",
       "888  female   NaN      1      2  W./C. 6607  23.45   NaN        S  \n",
       "889    male  26.0      0      0      111369  30.00  C148        C  \n",
       "890    male  32.0      0      0      370376   7.75   NaN        Q  "
      ]
     },
     "execution_count": 9,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "train_df.tail()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "_cell_guid": "8bfe9610-689a-29b2-26ee-f67cd4719079",
    "_uuid": "699c52b7a8d076ccd5ea5bc5d606313c558a6e8e"
   },
   "source": [
    "**Which features contain blank, null or empty values?**\n",
    "\n",
    "These will require correcting.\n",
    "\n",
    "- Cabin > Age > Embarked features contain a number of null values in that order for the training dataset.\n",
    "- Cabin > Age are incomplete in case of test dataset.\n",
    "\n",
    "**What are the data types for various features?**\n",
    "\n",
    "Helping us during converting goal.\n",
    "\n",
    "- Seven features are integer or floats. Six in case of test dataset.\n",
    "- Five features are strings (object)."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {
    "_cell_guid": "9b805f69-665a-2b2e-f31d-50d87d52865d",
    "_uuid": "817e1cf0ca1cb96c7a28bb81192d92261a8bf427",
    "collapsed": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "<class 'pandas.core.frame.DataFrame'>\n",
      "RangeIndex: 891 entries, 0 to 890\n",
      "Data columns (total 12 columns):\n",
      "PassengerId    891 non-null int64\n",
      "Survived       891 non-null int64\n",
      "Pclass         891 non-null int64\n",
      "Name           891 non-null object\n",
      "Sex            891 non-null object\n",
      "Age            714 non-null float64\n",
      "SibSp          891 non-null int64\n",
      "Parch          891 non-null int64\n",
      "Ticket         891 non-null object\n",
      "Fare           891 non-null float64\n",
      "Cabin          204 non-null object\n",
      "Embarked       889 non-null object\n",
      "dtypes: float64(2), int64(5), object(5)\n",
      "memory usage: 83.6+ KB\n",
      "________________________________________\n",
      "<class 'pandas.core.frame.DataFrame'>\n",
      "RangeIndex: 418 entries, 0 to 417\n",
      "Data columns (total 11 columns):\n",
      "PassengerId    418 non-null int64\n",
      "Pclass         418 non-null int64\n",
      "Name           418 non-null object\n",
      "Sex            418 non-null object\n",
      "Age            332 non-null float64\n",
      "SibSp          418 non-null int64\n",
      "Parch          418 non-null int64\n",
      "Ticket         418 non-null object\n",
      "Fare           417 non-null float64\n",
      "Cabin          91 non-null object\n",
      "Embarked       418 non-null object\n",
      "dtypes: float64(2), int64(4), object(5)\n",
      "memory usage: 36.0+ KB\n"
     ]
    }
   ],
   "source": [
    "train_df.info()\n",
    "print('_'*40)\n",
    "test_df.info()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "_cell_guid": "859102e1-10df-d451-2649-2d4571e5f082",
    "_uuid": "2b7c205bf25979e3242762bfebb0e3eb2fd63010"
   },
   "source": [
    "**What is the distribution of numerical feature values across the samples?**\n",
    "\n",
    "This helps us determine, among other early insights, how representative is the training dataset of the actual problem domain.\n",
    "\n",
    "- Total samples are 891 or 40% of the actual number of passengers on board the Titanic (2,224).\n",
    "- Survived is a categorical feature with 0 or 1 values.\n",
    "- Around 38% samples survived representative of the actual survival rate at 32%.\n",
    "- Most passengers (> 75%) did not travel with parents or children.\n",
    "- Nearly 30% of the passengers had siblings and/or spouse aboard.\n",
    "- Fares varied significantly with few passengers (<1%) paying as high as $512.\n",
    "- Few elderly passengers (<1%) within age range 65-80."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {
    "_cell_guid": "58e387fe-86e4-e068-8307-70e37fe3f37b",
    "_uuid": "380251a1c1e0b89147d321968dc739b6cc0eecf2",
    "collapsed": false
   },
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "/Users/admin/anaconda/lib/python2.7/site-packages/numpy/lib/function_base.py:4274: RuntimeWarning: Invalid value encountered in percentile\n",
      "  interpolation=interpolation)\n"
     ]
    },
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>PassengerId</th>\n",
       "      <th>Survived</th>\n",
       "      <th>Pclass</th>\n",
       "      <th>Age</th>\n",
       "      <th>SibSp</th>\n",
       "      <th>Parch</th>\n",
       "      <th>Fare</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>count</th>\n",
       "      <td>891.000000</td>\n",
       "      <td>891.000000</td>\n",
       "      <td>891.000000</td>\n",
       "      <td>714.000000</td>\n",
       "      <td>891.000000</td>\n",
       "      <td>891.000000</td>\n",
       "      <td>891.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>mean</th>\n",
       "      <td>446.000000</td>\n",
       "      <td>0.383838</td>\n",
       "      <td>2.308642</td>\n",
       "      <td>29.699118</td>\n",
       "      <td>0.523008</td>\n",
       "      <td>0.381594</td>\n",
       "      <td>32.204208</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>std</th>\n",
       "      <td>257.353842</td>\n",
       "      <td>0.486592</td>\n",
       "      <td>0.836071</td>\n",
       "      <td>14.526497</td>\n",
       "      <td>1.102743</td>\n",
       "      <td>0.806057</td>\n",
       "      <td>49.693429</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>min</th>\n",
       "      <td>1.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>0.420000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>25%</th>\n",
       "      <td>223.500000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>2.000000</td>\n",
       "      <td>NaN</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>7.910400</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>50%</th>\n",
       "      <td>446.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>3.000000</td>\n",
       "      <td>NaN</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>14.454200</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>75%</th>\n",
       "      <td>668.500000</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>3.000000</td>\n",
       "      <td>NaN</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>31.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>max</th>\n",
       "      <td>891.000000</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>3.000000</td>\n",
       "      <td>80.000000</td>\n",
       "      <td>8.000000</td>\n",
       "      <td>6.000000</td>\n",
       "      <td>512.329200</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "       PassengerId    Survived      Pclass         Age       SibSp  \\\n",
       "count   891.000000  891.000000  891.000000  714.000000  891.000000   \n",
       "mean    446.000000    0.383838    2.308642   29.699118    0.523008   \n",
       "std     257.353842    0.486592    0.836071   14.526497    1.102743   \n",
       "min       1.000000    0.000000    1.000000    0.420000    0.000000   \n",
       "25%     223.500000    0.000000    2.000000         NaN    0.000000   \n",
       "50%     446.000000    0.000000    3.000000         NaN    0.000000   \n",
       "75%     668.500000    1.000000    3.000000         NaN    1.000000   \n",
       "max     891.000000    1.000000    3.000000   80.000000    8.000000   \n",
       "\n",
       "            Parch        Fare  \n",
       "count  891.000000  891.000000  \n",
       "mean     0.381594   32.204208  \n",
       "std      0.806057   49.693429  \n",
       "min      0.000000    0.000000  \n",
       "25%      0.000000    7.910400  \n",
       "50%      0.000000   14.454200  \n",
       "75%      0.000000   31.000000  \n",
       "max      6.000000  512.329200  "
      ]
     },
     "execution_count": 11,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "train_df.describe()\n",
    "# Review survived rate using `percentiles=[.61, .62]` knowing our problem description mentions 38% survival rate.\n",
    "# Review Parch distribution using `percentiles=[.75, .8]`\n",
    "# SibSp distribution `[.68, .69]`\n",
    "# Age and Fare `[.1, .2, .3, .4, .5, .6, .7, .8, .9, .99]`"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "_cell_guid": "5462bc60-258c-76bf-0a73-9adc00a2f493",
    "_uuid": "33bbd1709db622978c0c5879e7c5532d4734ade0"
   },
   "source": [
    "**What is the distribution of categorical features?**\n",
    "\n",
    "- Names are unique across the dataset (count=unique=891)\n",
    "- Sex variable as two possible values with 65% male (top=male, freq=577/count=891).\n",
    "- Cabin values have several dupicates across samples. Alternatively several passengers shared a cabin.\n",
    "- Embarked takes three possible values. S port used by most passengers (top=S)\n",
    "- Ticket feature has high ratio (22%) of duplicate values (unique=681)."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {
    "_cell_guid": "8066b378-1964-92e8-1352-dcac934c6af3",
    "_uuid": "daa8663f577f9c1a478496cf14fe363570457191",
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Name</th>\n",
       "      <th>Sex</th>\n",
       "      <th>Ticket</th>\n",
       "      <th>Cabin</th>\n",
       "      <th>Embarked</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>count</th>\n",
       "      <td>891</td>\n",
       "      <td>891</td>\n",
       "      <td>891</td>\n",
       "      <td>204</td>\n",
       "      <td>889</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>unique</th>\n",
       "      <td>891</td>\n",
       "      <td>2</td>\n",
       "      <td>681</td>\n",
       "      <td>147</td>\n",
       "      <td>3</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>top</th>\n",
       "      <td>Graham, Mr. George Edward</td>\n",
       "      <td>male</td>\n",
       "      <td>CA. 2343</td>\n",
       "      <td>C23 C25 C27</td>\n",
       "      <td>S</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>freq</th>\n",
       "      <td>1</td>\n",
       "      <td>577</td>\n",
       "      <td>7</td>\n",
       "      <td>4</td>\n",
       "      <td>644</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "                             Name   Sex    Ticket        Cabin Embarked\n",
       "count                         891   891       891          204      889\n",
       "unique                        891     2       681          147        3\n",
       "top     Graham, Mr. George Edward  male  CA. 2343  C23 C25 C27        S\n",
       "freq                            1   577         7            4      644"
      ]
     },
     "execution_count": 12,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "train_df.describe(include=['O'])"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "_cell_guid": "2cb22b88-937d-6f14-8b06-ea3361357889",
    "_uuid": "c1d35ebd89a0cf7d7b409470bbb9ecaffd2a9680"
   },
   "source": [
    "### Assumtions based on data analysis\n",
    "\n",
    "We arrive at following assumptions based on data analysis done so far. We may validate these assumptions further before taking appropriate actions.\n",
    "\n",
    "**Correlating.**\n",
    "\n",
    "We want to know how well does each feature correlate with Survival. We want to do this early in our project and match these quick correlations with modelled correlations later in the project.\n",
    "\n",
    "**Completing.**\n",
    "\n",
    "1. We may want to complete Age feature as it is definitely correlated to survival.\n",
    "2. We may want to complete the Embarked feature as it may also correlate with survival or another important feature.\n",
    "\n",
    "**Correcting.**\n",
    "\n",
    "1. Ticket feature may be dropped from our analysis as it contains high ratio of duplicates (22%) and there may not be a correlation between Ticket and survival.\n",
    "2. Cabin feature may be dropped as it is highly incomplete or contains many null values both in training and test dataset.\n",
    "3. PassengerId may be dropped from training dataset as it does not contribute to survival.\n",
    "4. Name feature is relatively non-standard, may not contribute directly to survival, so maybe dropped.\n",
    "\n",
    "**Creating.**\n",
    "\n",
    "1. We may want to create a new feature called Family based on Parch and SibSp to get total count of family members on board.\n",
    "2. We may want to engineer the Name feature to extract Title as a new feature.\n",
    "3. We may want to create new feature for Age bands. This turns a continous numerical feature into an ordinal categorical feature.\n",
    "4. We may also want to create a Fare range feature if it helps our analysis.\n",
    "\n",
    "**Classifying.**\n",
    "\n",
    "We may also add to our assumptions based on the problem description noted earlier.\n",
    "\n",
    "1. Women (Sex=female) were more likely to have survived.\n",
    "2. Children (Age<?) were more likely to have survived. \n",
    "3. The upper-class passengers (Pclass=1) were more likely to have survived."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "_cell_guid": "6db63a30-1d86-266e-2799-dded03c45816",
    "_uuid": "946ee6ca01a3e4eecfa373ca00f88042b683e2ad"
   },
   "source": [
    "## Analyze by pivoting features\n",
    "\n",
    "To confirm some of our observations and assumptions, we can quickly analyze our feature correlations by pivoting features against each other. We can only do so at this stage for features which do not have any empty values. It also makes sense doing so only for features which are categorical (Sex), ordinal (Pclass) or discrete (SibSp, Parch) type.\n",
    "\n",
    "- **Pclass** We observe significant correlation (>0.5) among Pclass=1 and Survived (classifying #3). We decide to include this feature in our model.\n",
    "- **Sex** We confirm the observation during problem definition that Sex=female had very high survival rate at 74% (classifying #1).\n",
    "- **SibSp and Parch** These features have zero correlation for certain values. It may be best to derive a feature or a set of features from these individual features (creating #1)."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {
    "_cell_guid": "0964832a-a4be-2d6f-a89e-63526389cee9",
    "_uuid": "97a845528ce9f76e85055a4bb9e97c27091f6aa1",
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Pclass</th>\n",
       "      <th>Survived</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>1</td>\n",
       "      <td>0.629630</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>2</td>\n",
       "      <td>0.472826</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>3</td>\n",
       "      <td>0.242363</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   Pclass  Survived\n",
       "0       1  0.629630\n",
       "1       2  0.472826\n",
       "2       3  0.242363"
      ]
     },
     "execution_count": 13,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "train_df[['Pclass', 'Survived']].groupby(['Pclass'], as_index=False).mean().sort_values(by='Survived', ascending=False)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {
    "_cell_guid": "68908ba6-bfe9-5b31-cfde-6987fc0fbe9a",
    "_uuid": "00a2f2bca094c5984e6a232c730c8b232e7e20bb",
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Sex</th>\n",
       "      <th>Survived</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>female</td>\n",
       "      <td>0.742038</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>male</td>\n",
       "      <td>0.188908</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "      Sex  Survived\n",
       "0  female  0.742038\n",
       "1    male  0.188908"
      ]
     },
     "execution_count": 14,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "train_df[[\"Sex\", \"Survived\"]].groupby(['Sex'], as_index=False).mean().sort_values(by='Survived', ascending=False)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "metadata": {
    "_cell_guid": "01c06927-c5a6-342a-5aa8-2e486ec3fd7c",
    "_uuid": "a8f7a16c54417dcd86fc48aeef0c4b240d47d71b",
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>SibSp</th>\n",
       "      <th>Survived</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>1</td>\n",
       "      <td>0.535885</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>2</td>\n",
       "      <td>0.464286</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>0</td>\n",
       "      <td>0.345395</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>3</td>\n",
       "      <td>0.250000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>4</td>\n",
       "      <td>0.166667</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>5</td>\n",
       "      <td>0.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>6</th>\n",
       "      <td>8</td>\n",
       "      <td>0.000000</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   SibSp  Survived\n",
       "1      1  0.535885\n",
       "2      2  0.464286\n",
       "0      0  0.345395\n",
       "3      3  0.250000\n",
       "4      4  0.166667\n",
       "5      5  0.000000\n",
       "6      8  0.000000"
      ]
     },
     "execution_count": 15,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "train_df[[\"SibSp\", \"Survived\"]].groupby(['SibSp'], as_index=False).mean().sort_values(by='Survived', ascending=False)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "metadata": {
    "_cell_guid": "e686f98b-a8c9-68f8-36a4-d4598638bbd5",
    "_uuid": "5d953a6779b00b7f3794757dec8744a03162c8fd",
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Parch</th>\n",
       "      <th>Survived</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>3</td>\n",
       "      <td>0.600000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>1</td>\n",
       "      <td>0.550847</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>2</td>\n",
       "      <td>0.500000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>0</td>\n",
       "      <td>0.343658</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>5</td>\n",
       "      <td>0.200000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>4</td>\n",
       "      <td>0.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>6</th>\n",
       "      <td>6</td>\n",
       "      <td>0.000000</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   Parch  Survived\n",
       "3      3  0.600000\n",
       "1      1  0.550847\n",
       "2      2  0.500000\n",
       "0      0  0.343658\n",
       "5      5  0.200000\n",
       "4      4  0.000000\n",
       "6      6  0.000000"
      ]
     },
     "execution_count": 16,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "train_df[[\"Parch\", \"Survived\"]].groupby(['Parch'], as_index=False).mean().sort_values(by='Survived', ascending=False)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "_cell_guid": "0d43550e-9eff-3859-3568-8856570eff76",
    "_uuid": "5c6204d01f5a9040cf0bb7c678686ae48daa201f"
   },
   "source": [
    "## Analyze by visualizing data\n",
    "\n",
    "Now we can continue confirming some of our assumptions using visualizations for analyzing the data.\n",
    "\n",
    "### Correlating numerical features\n",
    "\n",
    "Let us start by understanding correlations between numerical features and our solution goal (Survived).\n",
    "\n",
    "A histogram chart is useful for analyzing continous numerical variables like Age where banding or ranges will help identify useful patterns. The histogram can indicate distribution of samples using automatically defined bins or equally ranged bands. This helps us answer questions relating to specific bands (Did infants have better survival rate?)\n",
    "\n",
    "Note that x-axis in historgram visualizations represents the count of samples or passengers.\n",
    "\n",
    "**Observations.**\n",
    "\n",
    "- Infants (Age <=4) had high survival rate.\n",
    "- Oldest passengers (Age = 80) survived.\n",
    "- Large number of 15-25 year olds did not survive.\n",
    "- Most passengers are in 15-35 age range.\n",
    "\n",
    "**Decisions.**\n",
    "\n",
    "This simple analysis confirms our assumptions as decisions for subsequent workflow stages.\n",
    "\n",
    "- We should consider Age (our assumption classifying #2) in our model training.\n",
    "- Complete the Age feature for null values (completing #1).\n",
    "- We should band age groups (creating #3)."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "metadata": {
    "_cell_guid": "50294eac-263a-af78-cb7e-3778eb9ad41f",
    "_uuid": "d3a1fa63e9dd4f8a810086530a6363c94b36d030",
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<seaborn.axisgrid.FacetGrid at 0x115faad50>"
      ]
     },
     "execution_count": 17,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\nQmCC\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x115faa850>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "g = sns.FacetGrid(train_df, col='Survived')\n",
    "g.map(plt.hist, 'Age', bins=20)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "_cell_guid": "87096158-4017-9213-7225-a19aea67a800",
    "_uuid": "892259f68c2ecf64fd258965cff1ecfe77dd73a9"
   },
   "source": [
    "### Correlating numerical and ordinal features\n",
    "\n",
    "We can combine multiple features for identifying correlations using a single plot. This can be done with numerical and categorical features which have numeric values.\n",
    "\n",
    "**Observations.**\n",
    "\n",
    "- Pclass=3 had most passengers, however most did not survive. Confirms our classifying assumption #2.\n",
    "- Infant passengers in Pclass=2 and Pclass=3 mostly survived. Further qualifies our classifying assumption #2.\n",
    "- Most passengers in Pclass=1 survived. Confirms our classifying assumption #3.\n",
    "- Pclass varies in terms of Age distribution of passengers.\n",
    "\n",
    "**Decisions.**\n",
    "\n",
    "- Consider Pclass for model training."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "metadata": {
    "_cell_guid": "916fdc6b-0190-9267-1ea9-907a3d87330d",
    "_uuid": "4f5bcfa97c8a72f8b413c786954f3a68e135e05a",
    "collapsed": false
   },
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "/Users/admin/anaconda/lib/python2.7/site-packages/seaborn/axisgrid.py:230: UserWarning: The `size` paramter has been renamed to `height`; please update your code.\n",
      "  warnings.warn(msg, UserWarning)\n"
     ]
    },
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAskAAAKNCAYAAADS/PaXAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAAPYQAAD2EBqD+naQAAIABJREFUeJzs3XucZHV95//XG5lhZhSHBQyoWS4aIy4xmo6aaHC8PdaN\nGiYb4iWNGKNZY1D3sSG/0c3FC5eVbIIGI8bFy0QTdCsRwUAHjYkaVshNbbygARFULgkgYLj23JDP\n74+q0ZqanpmuqlPV1d2v5+NRj+n+nu/5nk+d7vnMZ059z/ekqpAkSZL0A/stdgCSJEnSpLFIliRJ\nknpYJEuSJEk9LJIlSZKkHhbJkiRJUg+LZEmSJKmHRbIkSZLUwyJZkiRJ6mGRLEmSJPWwSNaykmR9\nkpMXOw5JWm7Mr1ppLJKXuCSXJtmRZGuS+5JckeQ/9znGt5IcPKoYh5FkdZKrktyf5IQF7HIQ8Jp9\njPlDSf4qyT1JPp/kSc1EO++xXpfkC6Mav+s4Rya5ssHx3pzkliR3Jnl/kgc3Nba0VJhfd2N+bWa8\nUzvn/OKmxtRoWCQvfQU8parWAIcCbwHOS/KoPseYSFW1vaoeB/xZP7vtY/vbgU8DBwPvBT6W5IAB\nQ9yXW4CrRjR2r0Z+jkl+HdgIPAX44U7z+5oYW1pizK/z7LaP7ebXfQ1UdSrw7KbG0+hYJC8PAaiq\nLVU1A5xPu8jpa/8J12SMTwQ+WlU7qup9wBOraluD439fVX20ql42irFH6DeA/1ZVN1TVvcCvA09L\ncvQixyUtBvNrf8yvC7MUfi9WPIvk5Wk1sGPnN0kem+SjSb6b5K4kn0qyYU87J3lJkiuTbOn8+eIk\nZyX55c72x3Q+Rrs7yXuSrO60n9o5xlVJnjnqNzmEfwJ+Z+c3VXXHzq+T/F2Sqe7OSZ6RZKbz9VuS\nnNn52PVjnY/73tXTf/8k1yc5PMkvJvlAp/0LSX6yp+/PJfmrru9/JMlFnY8q70hyXpLDe/Y5MskF\nnfN/W5J3Aw8d/rRAkocB66rqSzvbqup+4GK88iGB+XVfzK9aNiySl4cAJFmV5HnAi4CPd9p+lPZH\nX/8PeCztjwzPBj6Q5Kd3Gyj5VeCtwP+gPf/sl4BXA8/v6nY68Ee0P4q/HliX5LHAzwNHAr8G/Md5\nxn565x+GuXn+fE8D52Ghfhd4VpLzk6xb4D7dH7WdDPx34IXAB4Gfz65zdn8R+MequqVn33cCr+0Z\n97XAOQBJHg58AjiP9s/pR4CvAH+X5CGdPocDnwU+BzyK9s/0G5195pXk6s453u28z9P9CODaedqv\n6RxPWmnMr/0xv+45v2qJ2X+xA1Aj/j7JdmAL8HXgRVX1rc62/w28pao2d/W/JMk/V9Xt3YN0rli8\nFXhWVe2c5/W1JBuBr3V1vR+4t6ruBs7s7HsosB3YUlWXAZf1BtlpXzvkex1aVX2n8w/YBcBnkzyv\nqm7rY4hLq+rvO1/fm+RC4JeB/9Npey1dV1K6/AVwepKDqurOJI8Gjq6qT3a2/y7wtqr6aOf7bcBZ\nncT9q7T/4fxd4ENV9ftd456d5EDa/6jM936P6eO9rQXmS+5bmICfnbQIzK99ML9qOfFK8vLw1Kp6\naFUdVlUbqurTXdueBbR6d+hN4B2PB67vSuA7+94HXNLVdCrw1iT/K8naTp9rgU8C/5jkqcO9ndGr\nqjuB59K+UnPRPrr3/j3pvcv5j2nP2yXJ44EDq+ryeY65DfgQ8MpO08nAuV1dngG8o+tqxFySLbTv\nJn9iV58PzRPjn+/jPSzUFmDNPO2HMH/xLC135tc+mV+1XFgkLw97uwHgQZ3XQtRexvr+70pVXQf8\nBO0rG5clWdNpfzPtZPauJCftFmSyIe3llLZ3vXZ+P/bVE6rqe8DLgMfkB3MIt7H7Jyy989Hu7hnn\nGuDfOmO8hnZS35NzgVd1PoZ8CfAn3UMBP15Va6tqXee1tvN6RadPmP9ntMffgSTf6Dnn3z/v83S/\ngfmnVRwNfHMv70tarsyvAzC/zptftcRYJC9/lwGv6G1M+watXlcCj0xyTE/fh7DrnLmdSwedTnu+\n1s92tc8CJwKv7x28qj5bVauqanXXa+f3rxrkzfUryROSvLQrpjngJuAhnaZbgKN6dutdP/SBeYY+\nB/gt2udpvisRO493E/BV2nPtLul8pLrT5bTnHfbG/PrOFRSAS4GXzzP09F6O+Ziec/798z5P39uA\nbUke03X8/Ttxfbq3v7TCmV+7mF/3nl+19FgkL3+/DbwpyW+mvcj76iQ/D3wuyVO6O1bVDtpzvWaS\nPDvJmiQ/DvwlcNfOfknelvZdwo+kfcXjhrTvUH5N5+PBFwDfHtP769edwNuTHJ/kgCSvon0Tx845\nfpcAb0z7DvM1SX6L9sek+/IJ4EeBj1TV1n30PYf2zSfn9LSfCbw2ySuSPCTJw5KcDvwKP7iZ7kzg\nxCS/m+TQzut/0j7nTXkHsDnJIztz8d4J/E1VXd/gMaTlwPy6K/OrlhWL5KVvrwucV9VXaC/d9Rzg\nOuA7tOdq/VJVfa53jKr6U9r/Y38H8F3ai8yfDfx117BXAH8HfAn4k6q6gvZdwv8FuJ12gvqNYd9Y\n71tpZJB2ofd82v+43Ub7hpCfrap7OtvPBz4C/APtqQfrmeeqzTzjFu1i8t0L6PtZ4I+r6ms97TfR\nPocnADfTXiT/KOCZVbWl0+dmYAPwJOBbwL8Ah9H+WLMRVfUe4G9o/5xvpP3xqI+i1Upkfu1nEPOr\nlpm0f/cG3DnZRPsv8Xc7318PPJz2/J0Cfqeq3tZEoNJCJDkSmKmqH1/sWCRpOTG/aqUZeAm4zhye\nM+hMjO98LFvOw9EE8ElGkjQa5letGANNt0iyivbk+e67eo+lvYaktNga+ehQkrQb86tWjEGvJJ8B\nfBk4sKvNIlmLrjMnzo8CJalh5letNH1fSU5yHO3Hcr6WXT92ORZ4YZLb037u+nMbilGSJEkaq76K\n5M56jh8AfmXn3apdLgGeBhwObKK9hJSPa5QkSdKS0++V5D8CLqz2M+J3CkBVfbqqvl1V91fVZ4Df\np/089HklWZdkqvNkHElSQ8yvkjS8BRfJSZ4PnAT893Seew4cCdyYZL6Ftr8F/PBehjwGmN2wYcN9\nGzdurO5Xq9Uq2jcHLOprUuJYarFNenyTHJvxLY/YWq1W9ea1jRs3VpLeBxyMykTn10mIYanGN8mx\nGd/yjW1S4ht7bq2qgV/AN4GDgTcCG3u2/R5w2l72nQJqdna2JtXxxx+/2CHs0STHVjXZ8U1ybFXG\nN4xJjq2qCri4hsi5C31Nen6d9J/TJMc3ybFVGd8wJjm2qsmOb1S5deB1kjt23rh3BXBOkhuBq4EX\nA68EnjDk+JIkSdLYDVskF0BVfTzJw4HzgUcAX6R9ZfmWIceXJEmSxm6oIrmqHtX19WZg89ARSZIk\nSYtsoCfuSZIkScuZRfJeTE9PL3YIezTJscFkxzfJsYHxDWOSY+toLXYAk2DSf06THN8kxwbGN4xJ\njg0mPr6R5Na0bwocvyRTwOzs7CxTU1OLEoMkjVn23aWBg5hfJa0sI8mtXkmWJEmSelgkS5IkST0s\nkiVJkqQeFsmSJElSj6GK5CSbkhzc+fpxSS5LMpfkyiTPayZESZIkabwGLpKTPB44o/P1auAS4MPA\nQ4GTgfcnObaJICVJkqRxGqhITrIK+BDwoE7TCcCVVXVuVd1fVZcDpwFvaCZMSZIkaXwGvZJ8BvBl\n4KbO908HLurpcwHwnAHHlyRJkhZN30VykuOAFwGv7Wo+Ari2u19V3QEc0LnqLEmSJC0ZfRXJSR4C\nfAD4laq6p2vTWmBunl22drZJkiRJS8b+ffb/I+DCqrqsqy3AFmDNPP0PZv7i+ftOOeUU1q9fv0vb\n9PT0pD8jXJL2qNVq0Wq1dmufmZmZrqrdN4yI+VXScjLu3JqqWljH5PnAx4DvdTUfAGwDbgZOrarz\nuvofBny+qo7Yw3hTwOzs7CxTU1MDhi9JS0rGchDzq6SVZSS5dcHTLarq41V1QFWt2/kCrgceCbwR\n6F0X+UXAp5oLVZIkSRqPYZ+4l87rQuDJSU5Ksn+SpwKbgLOGDVCSJEkat2GL5AKoqm3A8cCrgXuA\n9wGvqqqrhhxfkiRJGrt+b9zbRVU9quvrq2mvlyxJkiQtacNeSZYkSZKWHYtkSZIkqYdFsiRJktTD\nIlmSJEnqYZEsSZIk9bBIliRJknr0VSQnOSrJJ5LcneSqJC/p2X59ku1JdnT+3NRsuJIkSdLo9btO\n8sXAecBG4LHARUm+VVWfS3IgUFW1uukgJUmSpHFa8JXkJAcB76qqs6pqR1V9FbgIOK7T5Vjg6yOI\nUZIkSRqrBRfJVXVnVb0XIMmqJM8GTgA+3elikSxJkqRlYdAb9/4Z+Fvg0qr6cqftWOCFSW5PckWS\n5zYSoSRJkjRmgxbJPw08FTgmyes7bZcATwMOBzYBm5McM3yIkiRJ0nilqgbfOXkE8KWq+qF5tr0O\nOLKqXr/7npBkCpjdsGED69ev32Xb9PQ009PTA8clSYup1WrRarV2a5+ZmTmxqnbf0DDzq6TlaNy5\ndcFFcpIjge1VdXNP+y20i+FtPe0vAE6qqnmz8c4kPjs7y9TU1EDBS9ISk7EcxPwqaWUZSW7tZ7rF\nzwBv625IchRwD7Apycae/scB1wwTnCRJkrQY+imS/xJ4UpKXJVnTmW/cAk4Hvgi8I8lPJFmb5OXA\nK4H/03zIkiRJ0mgt+GEiVTWX5OeAPwbeDdwBnFVV5wEkeStwPvAI2kXzxqq6pfmQJUmSpNHq64l7\nVfUNYN6l3apqM7C5iaAkSZKkxTToEnCSJEnSsmWRLEmSJPWwSJYkSZJ6WCRLkiRJPSySJUmSpB4W\nyZIkSVKPvorkJEcl+USSu5NcleQlXdsel+SyJHNJrkzyvObDlSRJkkav3yvJFwOfAQ4BXgScmeQp\nSVYDlwAfBh4KnAy8P8mxTQYrSZIkjcOCi+QkBwHvqqqzqmpHVX0VuAg4DjgBuLKqzq2q+6vqcuA0\n4A0jiVqSJEkaoQUXyVV1Z1W9FyDJqiTPpl0cfwZ4Ou2CudsFwHOaClSSJEkal0Fv3Ptn4G+BS6vq\nS8ARwLXdHarqDuCAJKuGC1GSJEkar0GL5J8Gngock+QNwBpgbp5+W4G1Ax5DkiRJWhT7D7JTVW0H\nPpfkBOBLwD/RLpR7Hcz8xbMkSZI0sRZcJCc5EtheVTfvbKuqf0tSwG3A0cDlXf0PA+6oqvv3Nu4p\np5zC+vXrd2mbnp5menp6oaFJ0kRptVq0Wq3d2mdmZqaravcNI2J+lbScjDu3pqoW1jE5EXhBVb20\nq+0o2nOT3wRsrKoTu7a9DpiqqlfuYbwpYHZ2dpapqamB34AkLSEZy0HMr5JWlpHk1n7mJP8l8KQk\nL0uyJskxQAs4HfgY8OQkJyXZP8lTgU3AWc2HLEmSJI1WP0vAzQE/B7yM9vSKvwY+VFXnVdU24Hjg\n1cA9wPuAV1XVVc2HLEmSJI1WXzfuVdU3gOfuYdvVtNdLliRJkpa0QZeAkyRJkpYti2RJkiSph0Wy\nJEmS1MMiWZIkSephkSxJkiT1sEiWJEmSelgkS5IkST36KpKTHJTkg0luS3Jdkk09269Psj3Jjs6f\nm/Y0liRJkjSp+nqYCHAB8I/AUcDhwHlJ5qrq3UkOBKqqVjccoyRJkjRWC76SnOSJwCFV9caquq+q\nrgNeSftR1ADHAl8fQYySJEnSWPUz3WI/4O09bTcCP9T52iJZkiRJy8KCi+SquqKqzutpPh74Qufr\nY4EXJrk9yRVJnttUkJIkSdI4Dby6RZLDgbcBp3WaLgGeRnuu8iZgc5Jjho5QkiRJGrNUVf87JauB\nzwAXV9Uf7KHP64Ajq+r1e9g+Bcxu2LCB9evX77Jtenqa6enpvuOSpEnQarVotVq7tc/MzJxYVbtv\naJj5VdJyNO7cOmiR/CHaK1m8bC99XgCcVFXzZuOdSXx2dpapqam+Y5CkJShjOYj5VdLKMpLc2vd0\niySnAkcCr+hqe2OSjT1djwOuGSo6SZIkaRH0tU5ykpcCJwE/VVX3d226AjgnyY3A1cCLaS8P94Sm\nApUkSZLGZcFFcpLjgM2dfW5OAu3L2wU8GjgTOB94BPBFYGNV3dJ0wJIkSdKoLbhIrqrLgTV76bK5\n85IkSZKWtIGXgJMkSZKWK4tkSZIkqYdFsiRJktTDIlmSJEnqYZEsSZIk9bBIliRJknr0VSQnOSjJ\nB5PcluS6JJu6tj0uyWVJ5pJcmeR5zYcrSZIkjV6/V5IvAG4CjgKeC/xiktckWQ1cAnwYeChwMvD+\nJMc2GKskSZI0Fv08ce+JwCFV9cZO03VJXgH8BfBd4MqqOrez7fIkpwFvAF7eZMCSJEnSqPVzJXk/\n4O09bTcChwHHARf1bLsAeM7goUmSJEmLY8FFclVdUVXn9TQfD3weOAK4tqf/HcABSVYNHaUkSZI0\nRguebtEryeHA24BfAH4PmJun21ZgLbBj0ONIkqT+3XXXXczNzfdP876tW7eO9evXNxyRtLQMVCR3\nbtT7KPDOqvp8ki3Amnm6Hsz8xfP3nXLKKbv9RZyenmZ6enqQ0CRp0bVaLVqt1m7tMzMz01W1+4YR\nMb+uXHfddRdnnPEubr99sGtUhx66ije96XUWypoo486tqar+d0o+BFBVJ3W+/2Pgn7qnYyQ5DPh8\nVR2xhzGmgNnZ2VmmpqYGiV2SlpqM5SDm1xXv5ptv5rd/+z2sXXsC69Y9rK995+ZuY8uWC/m933s1\nD3/4w0cUodSokeTWvq8kJzkVOBJ4Vlfz5bTnJ3fPWX4R8KlhgpMkSYNbt+5hHHhg/4Xuli0jCEZa\nYvp9mMhLgZOA/1pV93dtuhB4cpKTkuyf5KnAJuCs5kKVJEmSxqOfdZKPAzZ39rk5CbQvbxfwaNpX\nkt/XeV0HvKqqrmo6YEmSJGnUFlwkV9XlzH9zXrenDxeOJEmStPj6fSy1JEmStOxZJEuSJEk9LJIl\nSZKkHhbJkiRJUg+LZEmSJKmHRbIkSZLUY6AiOclnknwvyW/Os+36JNuT7Oj8uWn4MCVJkqTx6fux\n1ABV9ewkb+5tT3Jge3OtHjoySZIkaZEMM90i87QdC3x9iDElSZKkRdf0nGSLZEmSJC15oyiSX5jk\n9iRXJHluw+NLkiRJI9d0kXwJ8DTgcGATsDnJMQ0fQ5IkSRqpgW7c25Oq+nTXt59J8vvArwKv39M+\np5xyCuvXr9+lbXp6munp6SZDk6SxabVatFqt3dpnZmamq2r3DSNifpW0nIw7tzZaJM/jW8DP7K3D\n2WefzdTU1IjDkKTx2UshOrYCGcyvkpaXcefWxqZbJHljko09zccB1zR1DEmSJGkcmrySfAVwTpIb\ngauBFwOvBJ7Q4DEkSRqbu+66i7m5uYH2Xbdu3W7TXSQtHY0VyVX18SQPB84HHgF8EdhYVbc0dQxJ\nksblrrvu4owz3sXtt+8YaP9DD13Fm970OgtlaYkauEiuqtPmadsMbB4qIkmSJsDc3By3376DtWtP\nYN26h/W5723cfvuFzM3NWSRLS9Sob9yTJGlJW7fuYRx44MP73m/LlhEEI2lsml4nWZIkSVryLJIl\nSZKkHhbJkiRJUg/nJEuSpF1s376VW2+9deD9Xf5Oy4FFsiRJ+r5t2+7mK1+5kjPPfIB169YNNIbL\n32k5GKhITvIZ4BnA66vqD7vaHwe8F/hJ4DrgDVX1iSYClSRJo7djxxa2bl3FmjW/wCGHHNX3/i5/\np+VioCK5qp6d5M3dbUlWA5cAfwA8C/hp4C+SPLeqvjZ0pJIkaWzWrj10oKXvwOXvtDwMM90iPd+f\nAFxZVed2vr88yWnAG4CXD3EcSZJWnGEeiX3rrbeyffv2hiNaGoY5b+B8av1Ak3OSnw5c1NN2AfDm\nefpKkqQ9GPaR2HNz9/C1r32Tgw/eyoEHNhzcBBv2vIHzqfUDTRbJRwB/0d1QVXckOSDJqqoa/DdW\nkqQVZJhHYgM88MC/sG3bOezYcf8Ioptcw54351OrW5NF8lpgvs83tna2WSRLktSHQR+Jfe+9gy/f\nthwMet7A+dT6gSYfJrIFWDNP+8HMXzxLkiRJE6nJK8k3AEcDl+9sSHIYcEdV7fHznlNOOWW3jzSm\np6eZnp5uMDRJGp9Wq0Wr1dqtfWZmZrqqdt8wIuZXScvJuHNrk0Xy5cDxwHldbS8CPrW3nc4++2ym\npqYaDEOSFtdeCtGxFchgfpW0vIw7tzZZJF8InJ7kJODPgScDm4DnNXgMSZIWbDGXURvm0c4reQk3\naVI0ViRX1bYkxwPv67yuA15VVVc1dQxJkhZqMZdRG/bRzit1CTdpkgxcJFfVafO0XU17vWRJkhbV\nYi6jNuyjnVfqEm7SJGlyuoUkSRNnMZdRG/TRzit9CTdpElgkSyM06HxIH4sqaSUbNHc6l1tNskiW\nRmSY+ZA+FlXSSjVM7nQut5pkkSyNyKDzIX0sqqSVbJi55M7lVpMskqURG2Q+pI9FlbTSDZI7ncut\nJlkkSwvU7xw558ZJWqlcI1rLgUWytACDzJFzbpyklcg1orVcNF4kJ/kzYBqoTtMnq+r4po8jjdMg\nc+ScGydpJXKNaC0Xo7iS/J+Ax1TVt0cwtrSo+pkjt9znxrm8naS9cY1oLXWNFslJAhxtgSwtby5v\nJ0la7pq+kvwo4F8bHlPShHF5O0nSctd0kXwscESSfwW2AOdW1dsaPoakCeHydpKk5arpIvl64JnA\n14CjgT9N8u9Vtbnh42gMBplzOu75pkshxnHyfGi5GXTuO7iUmAYzzPJ1O3bsYNWqVQMf23w8WRot\nkqvqy13fXpPk14APAHsskk855ZTdfiGmp6eZnp5uMjT1adA5p+Ocb7oUYhwnz8fkaLVatFqt3dpn\nZmamq2r3DSOy1PPrMHPfwaXE1L9hlq/bvn0r11zzNX70Rx/P6tWrBzq++Xjvxp1bR71O8jeBR+6t\nw9lnn83U1NSIw1C/BplzOu75pkshxnHyfEyOvRSiYyuQYenn12EeTwwuJab+DbN83W23/Qt33nk1\n++9//EBL35mP923cubWxIjnJC4AnVdVpXc1PB65p6hgav37nnC7GfNOlEOM4eT603Awy9x1cSkyD\nG2T5up2/b4MufQfm40nT5JXkK4DNSb4KzABPAc4FTm7wGJpwg87lch6WJEmaJI0VyVV1c5ITgLOB\nPwNuAt5SVZ9o6hiabMPM5XIeliRJmiRN37j3D8BPNTmmlo5B53I5D0uSJE2aUd+4pz0Y51Jdgxxr\nmKWTBpmPNc55WINMCVnOS0kthfPhI7AlSeNmkbwIxrlU16DHWq5LJw06JcTzsatxng8fgS1JWgwW\nyYtgnEt1DbqE0nJdOmnQKSGej12N83z4CGxJ0mKwSF5E41yqq99jLfelk/qdEuL52NVinA8fgS1J\nGieL5CVkKcwdHdRyfm+DWM7no9/3tlTe16Tavn07n/zkJwd+tDPAU57yFI4++ugGo5I0n2EeiQ3e\nh9E0i+QlYinMHR3Ucn5vg1jO52OQ97YU3tck++Y3v8n//b+zbNt2NMmD+t7/3ntvYW5um0WyNGLD\nLKO6k/dhNKvRIjnJgbQfILIRuAt4Z1X9QZPHGKdWq7Wnxx+OXe/c0auv/hjHHPML+9xvsebSXnll\ni8c/fmHnbtzzYu+556a++o/bVVddONHzhK+8ssWhhz5uoH0H+Vn38776+b1bDEmmq2qsj6YGqIJj\njnkhq1c/uO99v/a186lqdt7KJOXW+Uzy79EkxwbD5YdxmOTzN2ju32nU92FM8t/bUeXWpq8kvw+Y\nAx4O/Afgo0n+vare1+9AVcUDDzzQdwBJ2G+//frebz6T+Auxc+7otdf+NU9+8mv22X+x5tJ+9av9\nJ6JxzYu9995/HWi/cbn22r9m1ar/MLHzhL/61RbPfObpQ43Rz3vr530N8ns3ZtPA2IvkSTOJubXb\nJP8eTXJs0Ex+GKVJPn+D5v5uo7wPY8L/3o4ktzZWJCd5BPAM4Iiq2gHcm+TlwCdoF899ufTS/8dH\nP3pp33GsX7+G3/zN/8ahhx7a976SpOb1rnO9detWbr755n3u53x0aeUYdD38UWrySvLPAH/bKZAB\nqKqrk9yT5NFVdV0/g11//Y3ccMMjeeQjn7zgfb73ve1885sf57bbbrNIlqQJMN8611dddT2//dvv\n2ee+zkeXVoZh1sMfpSaL5COAa+dpvwZ4FNBXkQywZs1BHH74Exfcf8eOLdxzz8f7PYwkaUTmW+d6\n9ep/4JBDXr3PfZfr+uSSdjXoevjtfW8DThtJXE0WyWtpz0futaWzrdcagKuuumrewb797W9z663b\nqFr4vOQHHtjBvffezOzsLDfccMOC99uT73znO3zyk58cepxe3/3ud7n11hu5997PsmbNQQva59//\n/Vts23YnN93099x33ze5777vcO21+46td7+FGmS/XfdZWHyLEeMDD+xYhPOx8GNt3frvPPBAJjbG\n++77Djfd9E+L9Hu19326f++2br2Tbdtu5itf+cqCPtofk/VJ1lXVqD9T/H5+XbNmDd/97s1s23Yh\nD3rQ6r4H+s53ruSaa2rgXLgz3z34wVexZk3757Bt293ceutX9rnvoH+Hht1/5+/RMMcfVeyjzv3D\n7jtMfmji+Pvad1/nbzF/5oPm/h/sfyf33Xc9l156KQcffHDf++/LqGoimD9PLNTWrXfCiHJrqqqZ\ngZL/D1hbVf+rp/3jwB9W1ad62k8EPtzIwSVp6fjJqrpilAcwv0pagRrPrU1eSb4B+Nl52o8G5vsv\n0SeBlwLfBrY2GIckTbKrx3AM86uklabx3NrkleRHAP8IHF2dORJJfgy4qKoe3chBJEmSpDFoZkFh\noKr+Dfh74B1JHpzkPwLvBc5o6hiSJEnSODRWJHe8GjgYuAX4J+CjVfXBho8hSZIkjVRj0y0kSZKk\n5aLpK8mSJEnSkmeRLEmSJPWwSJYkSZJ6WCRLkiRJPSySJUmSpB4WyZIkSVIPi2RJkiSph0WyJEmS\n1MMiWZJLKFl4AAAgAElEQVQkSephkSxJkiT1sEiWJEmSelgkS5IkST0skiVJkqQeFsmSJElSD4tk\nSZIkqYdFspaVJOuTnLzYcUjScmN+1UpjkbzEJbk0yY4kW5Pcl+SKJP+5zzG+leTgUcU4jCSPTPKX\nSf49yVVJfnkfuxwEvGYfY/5Qkr9Kck+Szyd5UnMR73as1yX5wqjG7zrOkUmubHC8Nye5JcmdSd6f\n5MFNjS0tFebX3Zhfmxnv1CT3J7m4qTE1GhbJS18BT6mqNcChwFuA85I8qs8xJk6SVcDfAn8NPAI4\nEfidJM/bx677ej9vBz4NHAy8F/hYkgOGDHdPbgGuGtHYvRr5OSb5dWAj8BTghzvN72tibGmJMb/u\nzvw67EBVpwLPbmo8jY5F8vIQgKraUlUzwPm0i5y+9p9ALwC+UVXndt7bF4HfAH59yHGfCHy0qnZU\n1fuAJ1bVtmGDnU9VfbSqXjaKsUfoN4D/VlU3VNW9tM/305IcvchxSYvB/Nof8+vCTOrvhbpYJC9P\nq4EdO79J8tgkH03y3SR3JflUkg172jnJS5JcmWRL588XJzlr50dxSR7T+Rjt7iTvSbK6035q5xhX\nJXlmA+/jXuDcnrYbgR8actx/An5n5zdVdcfOr5P8XZKp7s5JnpFkpvP1W5Kc2fnY9WOdj/ve1dN/\n/yTXJzk8yS8m+UCn/QtJfrKn788l+auu738kyUWdjyrvSHJeksN79jkyyQWd839bkncDDx3ynOwc\n+2HAuqr60s62qrofuBivfEhgft0X86uWDYvk5SHQ/vis81HZi4CPd9p+lPZHX/8PeCztjwzPBj6Q\n5Kd3Gyj5VeCtwP+gPf/sl4BXA8/v6nY68Ee0P4q/HliX5LHAzwNHAr8G/Md5xn565x+GuXn+fE9v\n/6r6VFV9oqf5eGDYOWi/CzwryflJ1i1wn+6P2k4G/jvwQuCDwM9n1zm7vwj8Y1Xd0rPvO4HX9oz7\nWuAcgCQPBz4BnEf75/QjwFeAv0vykE6fw4HPAp8DHkX7Z/qNzj7zSnJ15xzvdt7n6X4EcO087dd0\njietNObX/phf95xftdRUla8l/AL+DtgK3A3cSvsv+HO6tl8I/Oo8+x3a9fW3aM8fW017jtfjevo+\n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\nddUSmhXE4OB2Vq5cxXnnjdDZ2Zlp2YUL2zj77A+4ULZpq7u7m+7u7jHty5cv74qIsU/UifOrmbWS\nRufWWo8kfxW4PyI+Xf79AeBw4NbRDpIOALZGxO7JVrRs2TIWL15cYxhWVMPD/QwMtNHe/mYWLDis\n6uVKpS309l5LqVRykWzT1iSFaMMKZHB+NbPW0ujcmrlIlvQx4FDg1RXNt5KMT64cs3wS8NOpBGfT\nX0fHQubOPSjTMv39dQrGzMzMrEqZimRJJwNvB/4sdYT4WuAcSW8Hvg28GDgD8A1FrGH6+voolSYd\n3TMhj4M2MzOzSlnmST4GuLS8zGZJAAICeAbJkeQvlx/rgFMjYnXeAZuNp6+vj3PPvYje3tquEfU4\naDMzM6tUdZEcEbcy/sV5lV4xtXDMalMqlejtHaaj4wQ6O/fPuKzHQZuZmdmeap4CzqyIOjv3zzwG\nGjwO2szMzPaU5Y57ZmZmZmYzgotkMzMzM7MUF8lmZmZmZikek2yFU8vtrHt6ehgaGqpTRGZmZjbT\nuEi2Qqn1dtal0g7uuWc98+cPMHduHQM0MzOzGaGmIlnSTcCrgA9FxOdSz20EDuLxOZT/NSLOn2qg\nNjPUejvrkZF7GRy8kOHhSe+CbmZmZlaVmorkiHiNpI+k2yXNTZ6O2VOOzGa0rLez3rkz2/AMMzMz\ns8lM5cI9jdN2FPDbKazTzMzMzKzp8p7dwkWymZmZmU179SiS3yKpV9IKSa/Lef1mZmZmZnWXd5F8\nA/By4EDgDOBSSUfkvA0zMzMzs7rKtUiOiBsj4v6I2B0RNwGfAk7JcxtmZmZmZvVW73mSNwBHT9Zh\n6dKlzJs3b4+2rq4uurq66hmXmVnddHd3093dPaZ9+fLlXREx9ok6cX41s1bS6NyaW5Es6SxgZUR8\nr6L5GGDtZMstW7aMxYsX5xWGmVnTTVKINqxABudXM2stjc6teR5JXgFcKOlBYA3wV8B7gOfluA0z\nMzMzs7rLrUiOiB9IOgi4GjgY+F9gSUQ8nNc2zMzMzMwaoeYiOSI+Pk7bpcClU4rIzMzMzKzJ8p4C\nzszMzMxs2nORbGZmZmaW4iLZzMzMzCzFRbKZmZmZWUq9byZStYigVCrVtGxbWxuzZ8/OOSIzMzMz\nm6kKUyT/z//8D93dN9e07EEHzeXMM0+ns7Mz36DMzMzMbEYqTJHc09PDpk0Hc+ihr8q0XKm0hQce\n+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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x1166cb550>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# grid = sns.FacetGrid(train_df, col='Pclass', hue='Survived')\n",
    "grid = sns.FacetGrid(train_df, col='Survived', row='Pclass', size=2.2, aspect=1.6)\n",
    "grid.map(plt.hist, 'Age', alpha=.5, bins=20)\n",
    "grid.add_legend();"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "_cell_guid": "36f5a7c0-c55c-f76f-fdf8-945a32a68cb0",
    "_uuid": "892ab7ee88b1b1c5f1ac987884fa31e111bb0507"
   },
   "source": [
    "### Correlating categorical features\n",
    "\n",
    "Now we can correlate categorical features with our solution goal.\n",
    "\n",
    "**Observations.**\n",
    "\n",
    "- Female passengers had much better survival rate than males. Confirms classifying (#1).\n",
    "- Exception in Embarked=C where males had higher survival rate. This could be a correlation between Pclass and Embarked and in turn Pclass and Survived, not necessarily direct correlation between Embarked and Survived.\n",
    "- Males had better survival rate in Pclass=3 when compared with Pclass=2 for C and Q ports. Completing (#2).\n",
    "- Ports of embarkation have varying survival rates for Pclass=3 and among male passengers. Correlating (#1).\n",
    "\n",
    "**Decisions.**\n",
    "\n",
    "- Add Sex feature to model training.\n",
    "- Complete and add Embarked feature to model training."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "metadata": {
    "_cell_guid": "db57aabd-0e26-9ff9-9ebd-56d401cdf6e8",
    "_uuid": "c0e1f01b3f58e8f31b938b0e5eb1733132edc8ad",
    "collapsed": false
   },
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "/Users/admin/anaconda/lib/python2.7/site-packages/seaborn/axisgrid.py:715: UserWarning: Using the pointplot function without specifying `order` is likely to produce an incorrect plot.\n",
      "  warnings.warn(warning)\n",
      "/Users/admin/anaconda/lib/python2.7/site-packages/seaborn/axisgrid.py:720: UserWarning: Using the pointplot function without specifying `hue_order` is likely to produce an incorrect plot.\n",
      "  warnings.warn(warning)\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "<seaborn.axisgrid.FacetGrid at 0x116b0b4d0>"
      ]
     },
     "execution_count": 19,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x116b271d0>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# grid = sns.FacetGrid(train_df, col='Embarked')\n",
    "grid = sns.FacetGrid(train_df, row='Embarked', size=2.2, aspect=1.6)\n",
    "grid.map(sns.pointplot, 'Pclass', 'Survived', 'Sex', palette='deep')\n",
    "grid.add_legend()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "_cell_guid": "6b3f73f4-4600-c1ce-34e0-bd7d9eeb074a",
    "_uuid": "fd824f937dcb80edd4117a2927cc0d7f99d934b8"
   },
   "source": [
    "### Correlating categorical and numerical features\n",
    "\n",
    "We may also want to correlate categorical features (with non-numeric values) and numeric features. We can consider correlating Embarked (Categorical non-numeric), Sex (Categorical non-numeric), Fare (Numeric continuous), with Survived (Categorical numeric).\n",
    "\n",
    "**Observations.**\n",
    "\n",
    "- Higher fare paying passengers had better survival. Confirms our assumption for creating (#4) fare ranges.\n",
    "- Port of embarkation correlates with survival rates. Confirms correlating (#1) and completing (#2).\n",
    "\n",
    "**Decisions.**\n",
    "\n",
    "- Consider banding Fare feature."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 20,
   "metadata": {
    "_cell_guid": "a21f66ac-c30d-f429-cc64-1da5460d16a9",
    "_uuid": "c8fd535ac1bc90127369027c2101dbc939db118e",
    "collapsed": false
   },
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "/Users/admin/anaconda/lib/python2.7/site-packages/seaborn/axisgrid.py:715: UserWarning: Using the barplot function without specifying `order` is likely to produce an incorrect plot.\n",
      "  warnings.warn(warning)\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "<seaborn.axisgrid.FacetGrid at 0x117f74550>"
      ]
     },
     "execution_count": 20,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\nAAAASUVORK5CYII=\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x116eaaa10>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# grid = sns.FacetGrid(train_df, col='Embarked', hue='Survived', palette={0: 'k', 1: 'w'})\n",
    "grid = sns.FacetGrid(train_df, row='Embarked', col='Survived', size=2.2, aspect=1.6)\n",
    "grid.map(sns.barplot, 'Sex', 'Fare', alpha=.5, ci=None)\n",
    "grid.add_legend()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "_cell_guid": "cfac6291-33cc-506e-e548-6cad9408623d",
    "_uuid": "73a9111a8dc2a6b8b6c78ef628b6cae2a63fc33f"
   },
   "source": [
    "## Wrangle data\n",
    "\n",
    "We have collected several assumptions and decisions regarding our datasets and solution requirements. So far we did not have to change a single feature or value to arrive at these. Let us now execute our decisions and assumptions for correcting, creating, and completing goals.\n",
    "\n",
    "### Correcting by dropping features\n",
    "\n",
    "This is a good starting goal to execute. By dropping features we are dealing with fewer data points. Speeds up our notebook and eases the analysis.\n",
    "\n",
    "Based on our assumptions and decisions we want to drop the Cabin (correcting #2) and Ticket (correcting #1) features.\n",
    "\n",
    "Note that where applicable we perform operations on both training and testing datasets together to stay consistent."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 21,
   "metadata": {
    "_cell_guid": "da057efe-88f0-bf49-917b-bb2fec418ed9",
    "_uuid": "e328d9882affedcfc4c167aa5bb1ac132547558c",
    "collapsed": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "('Before', (891, 12), (418, 11), (891, 12), (418, 11))\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "('After', (891, 10), (418, 9), (891, 10), (418, 9))"
      ]
     },
     "execution_count": 21,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "print(\"Before\", train_df.shape, test_df.shape, combine[0].shape, combine[1].shape)\n",
    "\n",
    "train_df = train_df.drop(['Ticket', 'Cabin'], axis=1)\n",
    "test_df = test_df.drop(['Ticket', 'Cabin'], axis=1)\n",
    "combine = [train_df, test_df]\n",
    "\n",
    "\"After\", train_df.shape, test_df.shape, combine[0].shape, combine[1].shape"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "_cell_guid": "6b3a1216-64b6-7fe2-50bc-e89cc964a41c",
    "_uuid": "21d5c47ee69f8fbef967f6f41d736b5d4eb6596f"
   },
   "source": [
    "### Creating new feature extracting from existing\n",
    "\n",
    "We want to analyze if Name feature can be engineered to extract titles and test correlation between titles and survival, before dropping Name and PassengerId features.\n",
    "\n",
    "In the following code we extract Title feature using regular expressions. The RegEx pattern `(\\w+\\.)` matches the first word which ends with a dot character within Name feature. The `expand=False` flag returns a DataFrame.\n",
    "\n",
    "**Observations.**\n",
    "\n",
    "When we plot Title, Age, and Survived, we note the following observations.\n",
    "\n",
    "- Most titles band Age groups accurately. For example: Master title has Age mean of 5 years.\n",
    "- Survival among Title Age bands varies slightly.\n",
    "- Certain titles mostly survived (Mme, Lady, Sir) or did not (Don, Rev, Jonkheer).\n",
    "\n",
    "**Decision.**\n",
    "\n",
    "- We decide to retain the new Title feature for model training."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 22,
   "metadata": {
    "_cell_guid": "df7f0cd4-992c-4a79-fb19-bf6f0c024d4b",
    "_uuid": "c916644bd151f3dc8fca900f656d415b4c55e2bc",
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th>Sex</th>\n",
       "      <th>female</th>\n",
       "      <th>male</th>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Title</th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>Capt</th>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Col</th>\n",
       "      <td>0</td>\n",
       "      <td>2</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Countess</th>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Don</th>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Dr</th>\n",
       "      <td>1</td>\n",
       "      <td>6</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Jonkheer</th>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Lady</th>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Major</th>\n",
       "      <td>0</td>\n",
       "      <td>2</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Master</th>\n",
       "      <td>0</td>\n",
       "      <td>40</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Miss</th>\n",
       "      <td>182</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Mlle</th>\n",
       "      <td>2</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Mme</th>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Mr</th>\n",
       "      <td>0</td>\n",
       "      <td>517</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Mrs</th>\n",
       "      <td>125</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Ms</th>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Rev</th>\n",
       "      <td>0</td>\n",
       "      <td>6</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Sir</th>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "Sex       female  male\n",
       "Title                 \n",
       "Capt           0     1\n",
       "Col            0     2\n",
       "Countess       1     0\n",
       "Don            0     1\n",
       "Dr             1     6\n",
       "Jonkheer       0     1\n",
       "Lady           1     0\n",
       "Major          0     2\n",
       "Master         0    40\n",
       "Miss         182     0\n",
       "Mlle           2     0\n",
       "Mme            1     0\n",
       "Mr             0   517\n",
       "Mrs          125     0\n",
       "Ms             1     0\n",
       "Rev            0     6\n",
       "Sir            0     1"
      ]
     },
     "execution_count": 22,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "for dataset in combine:\n",
    "    dataset['Title'] = dataset.Name.str.extract(' ([A-Za-z]+)\\.', expand=False)\n",
    "\n",
    "pd.crosstab(train_df['Title'], train_df['Sex'])"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "_cell_guid": "908c08a6-3395-19a5-0cd7-13341054012a",
    "_uuid": "f766d512ea5bfe60b5eb7a816f482f2ab688fd2f"
   },
   "source": [
    "We can replace many titles with a more common name or classify them as `Rare`."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 23,
   "metadata": {
    "_cell_guid": "553f56d7-002a-ee63-21a4-c0efad10cfe9",
    "_uuid": "b8cd938fba61fb4e226c77521b012f4bb8aa01d0",
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Title</th>\n",
       "      <th>Survived</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>Master</td>\n",
       "      <td>0.575000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>Miss</td>\n",
       "      <td>0.702703</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>Mr</td>\n",
       "      <td>0.156673</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>Mrs</td>\n",
       "      <td>0.793651</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>Rare</td>\n",
       "      <td>0.347826</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "    Title  Survived\n",
       "0  Master  0.575000\n",
       "1    Miss  0.702703\n",
       "2      Mr  0.156673\n",
       "3     Mrs  0.793651\n",
       "4    Rare  0.347826"
      ]
     },
     "execution_count": 23,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "for dataset in combine:\n",
    "    dataset['Title'] = dataset['Title'].replace(['Lady', 'Countess','Capt', 'Col',\\\n",
    " \t'Don', 'Dr', 'Major', 'Rev', 'Sir', 'Jonkheer', 'Dona'], 'Rare')\n",
    "\n",
    "    dataset['Title'] = dataset['Title'].replace('Mlle', 'Miss')\n",
    "    dataset['Title'] = dataset['Title'].replace('Ms', 'Miss')\n",
    "    dataset['Title'] = dataset['Title'].replace('Mme', 'Mrs')\n",
    "    \n",
    "train_df[['Title', 'Survived']].groupby(['Title'], as_index=False).mean()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "_cell_guid": "6d46be9a-812a-f334-73b9-56ed912c9eca",
    "_uuid": "de245fe76474d46995a5acc31b905b8aaa5893f6"
   },
   "source": [
    "We can convert the categorical titles to ordinal."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 24,
   "metadata": {
    "_cell_guid": "67444ebc-4d11-bac1-74a6-059133b6e2e8",
    "_uuid": "e805ad52f0514497b67c3726104ba46d361eb92c",
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>PassengerId</th>\n",
       "      <th>Survived</th>\n",
       "      <th>Pclass</th>\n",
       "      <th>Name</th>\n",
       "      <th>Sex</th>\n",
       "      <th>Age</th>\n",
       "      <th>SibSp</th>\n",
       "      <th>Parch</th>\n",
       "      <th>Fare</th>\n",
       "      <th>Embarked</th>\n",
       "      <th>Title</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>3</td>\n",
       "      <td>Braund, Mr. Owen Harris</td>\n",
       "      <td>male</td>\n",
       "      <td>22.0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>7.2500</td>\n",
       "      <td>S</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>2</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>Cumings, Mrs. John Bradley (Florence Briggs Th...</td>\n",
       "      <td>female</td>\n",
       "      <td>38.0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>71.2833</td>\n",
       "      <td>C</td>\n",
       "      <td>3</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>3</td>\n",
       "      <td>1</td>\n",
       "      <td>3</td>\n",
       "      <td>Heikkinen, Miss. Laina</td>\n",
       "      <td>female</td>\n",
       "      <td>26.0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>7.9250</td>\n",
       "      <td>S</td>\n",
       "      <td>2</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>4</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>Futrelle, Mrs. Jacques Heath (Lily May Peel)</td>\n",
       "      <td>female</td>\n",
       "      <td>35.0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>53.1000</td>\n",
       "      <td>S</td>\n",
       "      <td>3</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>5</td>\n",
       "      <td>0</td>\n",
       "      <td>3</td>\n",
       "      <td>Allen, Mr. William Henry</td>\n",
       "      <td>male</td>\n",
       "      <td>35.0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>8.0500</td>\n",
       "      <td>S</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   PassengerId  Survived  Pclass  \\\n",
       "0            1         0       3   \n",
       "1            2         1       1   \n",
       "2            3         1       3   \n",
       "3            4         1       1   \n",
       "4            5         0       3   \n",
       "\n",
       "                                                Name     Sex   Age  SibSp  \\\n",
       "0                            Braund, Mr. Owen Harris    male  22.0      1   \n",
       "1  Cumings, Mrs. John Bradley (Florence Briggs Th...  female  38.0      1   \n",
       "2                             Heikkinen, Miss. Laina  female  26.0      0   \n",
       "3       Futrelle, Mrs. Jacques Heath (Lily May Peel)  female  35.0      1   \n",
       "4                           Allen, Mr. William Henry    male  35.0      0   \n",
       "\n",
       "   Parch     Fare Embarked  Title  \n",
       "0      0   7.2500        S      1  \n",
       "1      0  71.2833        C      3  \n",
       "2      0   7.9250        S      2  \n",
       "3      0  53.1000        S      3  \n",
       "4      0   8.0500        S      1  "
      ]
     },
     "execution_count": 24,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "title_mapping = {\"Mr\": 1, \"Miss\": 2, \"Mrs\": 3, \"Master\": 4, \"Rare\": 5}\n",
    "for dataset in combine:\n",
    "    dataset['Title'] = dataset['Title'].map(title_mapping)\n",
    "    dataset['Title'] = dataset['Title'].fillna(0)\n",
    "\n",
    "train_df.head()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "_cell_guid": "f27bb974-a3d7-07a1-f7e4-876f6da87e62",
    "_uuid": "5fefaa1b37c537dda164c87a757fe705a99815d9"
   },
   "source": [
    "Now we can safely drop the Name feature from training and testing datasets. We also do not need the PassengerId feature in the training dataset."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 25,
   "metadata": {
    "_cell_guid": "9d61dded-5ff0-5018-7580-aecb4ea17506",
    "_uuid": "1da299cf2ffd399fd5b37d74fb40665d16ba5347",
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "((891, 9), (418, 9))"
      ]
     },
     "execution_count": 25,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "train_df = train_df.drop(['Name', 'PassengerId'], axis=1)\n",
    "test_df = test_df.drop(['Name'], axis=1)\n",
    "combine = [train_df, test_df]\n",
    "train_df.shape, test_df.shape"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "_cell_guid": "2c8e84bb-196d-bd4a-4df9-f5213561b5d3",
    "_uuid": "a1ac66c79b279d94860e66996d3d8dba801a6d9a"
   },
   "source": [
    "### Converting a categorical feature\n",
    "\n",
    "Now we can convert features which contain strings to numerical values. This is required by most model algorithms. Doing so will also help us in achieving the feature completing goal.\n",
    "\n",
    "Let us start by converting Sex feature to a new feature called Gender where female=1 and male=0."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 26,
   "metadata": {
    "_cell_guid": "c20c1df2-157c-e5a0-3e24-15a828095c96",
    "_uuid": "840498eaee7baaca228499b0a5652da9d4edaf37",
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Survived</th>\n",
       "      <th>Pclass</th>\n",
       "      <th>Sex</th>\n",
       "      <th>Age</th>\n",
       "      <th>SibSp</th>\n",
       "      <th>Parch</th>\n",
       "      <th>Fare</th>\n",
       "      <th>Embarked</th>\n",
       "      <th>Title</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>0</td>\n",
       "      <td>3</td>\n",
       "      <td>0</td>\n",
       "      <td>22.0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>7.2500</td>\n",
       "      <td>S</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>38.0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>71.2833</td>\n",
       "      <td>C</td>\n",
       "      <td>3</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>1</td>\n",
       "      <td>3</td>\n",
       "      <td>1</td>\n",
       "      <td>26.0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>7.9250</td>\n",
       "      <td>S</td>\n",
       "      <td>2</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>35.0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>53.1000</td>\n",
       "      <td>S</td>\n",
       "      <td>3</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>0</td>\n",
       "      <td>3</td>\n",
       "      <td>0</td>\n",
       "      <td>35.0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>8.0500</td>\n",
       "      <td>S</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   Survived  Pclass  Sex   Age  SibSp  Parch     Fare Embarked  Title\n",
       "0         0       3    0  22.0      1      0   7.2500        S      1\n",
       "1         1       1    1  38.0      1      0  71.2833        C      3\n",
       "2         1       3    1  26.0      0      0   7.9250        S      2\n",
       "3         1       1    1  35.0      1      0  53.1000        S      3\n",
       "4         0       3    0  35.0      0      0   8.0500        S      1"
      ]
     },
     "execution_count": 26,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "for dataset in combine:\n",
    "    dataset['Sex'] = dataset['Sex'].map( {'female': 1, 'male': 0} ).astype(int)\n",
    "\n",
    "train_df.head()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "_cell_guid": "d72cb29e-5034-1597-b459-83a9640d3d3a",
    "_uuid": "6da8bfe6c832f4bd2aa1312bdd6b8b4af48a012e"
   },
   "source": [
    "### Completing a numerical continuous feature\n",
    "\n",
    "Now we should start estimating and completing features with missing or null values. We will first do this for the Age feature.\n",
    "\n",
    "We can consider three methods to complete a numerical continuous feature.\n",
    "\n",
    "1. A simple way is to generate random numbers between mean and [standard deviation](https://en.wikipedia.org/wiki/Standard_deviation).\n",
    "\n",
    "2. More accurate way of guessing missing values is to use other correlated features. In our case we note correlation among Age, Gender, and Pclass. Guess Age values using [median](https://en.wikipedia.org/wiki/Median) values for Age across sets of Pclass and Gender feature combinations. So, median Age for Pclass=1 and Gender=0, Pclass=1 and Gender=1, and so on...\n",
    "\n",
    "3. Combine methods 1 and 2. So instead of guessing age values based on median, use random numbers between mean and standard deviation, based on sets of Pclass and Gender combinations.\n",
    "\n",
    "Method 1 and 3 will introduce random noise into our models. The results from multiple executions might vary. We will prefer method 2."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 27,
   "metadata": {
    "_cell_guid": "c311c43d-6554-3b52-8ef8-533ca08b2f68",
    "_uuid": "345038c8dd1bac9a9bc5e2cfee13fcc1f833eee0",
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<seaborn.axisgrid.FacetGrid at 0x116d3c2d0>"
      ]
     },
     "execution_count": 27,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x116d8ef50>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# grid = sns.FacetGrid(train_df, col='Pclass', hue='Gender')\n",
    "grid = sns.FacetGrid(train_df, row='Pclass', col='Sex', size=2.2, aspect=1.6)\n",
    "grid.map(plt.hist, 'Age', alpha=.5, bins=20)\n",
    "grid.add_legend()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "_cell_guid": "a4f166f9-f5f9-1819-66c3-d89dd5b0d8ff",
    "_uuid": "6b22ac53d95c7979d5f4580bd5fd29d27155c347"
   },
   "source": [
    "Let us start by preparing an empty array to contain guessed Age values based on Pclass x Gender combinations."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 28,
   "metadata": {
    "_cell_guid": "9299523c-dcf1-fb00-e52f-e2fb860a3920",
    "_uuid": "24a0971daa4cbc3aa700bae42e68c17ce9f3a6e2",
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[ 0.,  0.,  0.],\n",
       "       [ 0.,  0.,  0.]])"
      ]
     },
     "execution_count": 28,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "guess_ages = np.zeros((2,3))\n",
    "guess_ages"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "_cell_guid": "ec9fed37-16b1-5518-4fa8-0a7f579dbc82",
    "_uuid": "8acd90569767b544f055d573bbbb8f6012853385"
   },
   "source": [
    "Now we iterate over Sex (0 or 1) and Pclass (1, 2, 3) to calculate guessed values of Age for the six combinations."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 29,
   "metadata": {
    "_cell_guid": "a4015dfa-a0ab-65bc-0cbe-efecf1eb2569",
    "_uuid": "31198f0ad0dbbb74290ebe135abffa994b8f58f3",
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Survived</th>\n",
       "      <th>Pclass</th>\n",
       "      <th>Sex</th>\n",
       "      <th>Age</th>\n",
       "      <th>SibSp</th>\n",
       "      <th>Parch</th>\n",
       "      <th>Fare</th>\n",
       "      <th>Embarked</th>\n",
       "      <th>Title</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>0</td>\n",
       "      <td>3</td>\n",
       "      <td>0</td>\n",
       "      <td>22</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>7.2500</td>\n",
       "      <td>S</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>38</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>71.2833</td>\n",
       "      <td>C</td>\n",
       "      <td>3</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>1</td>\n",
       "      <td>3</td>\n",
       "      <td>1</td>\n",
       "      <td>26</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>7.9250</td>\n",
       "      <td>S</td>\n",
       "      <td>2</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>35</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>53.1000</td>\n",
       "      <td>S</td>\n",
       "      <td>3</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>0</td>\n",
       "      <td>3</td>\n",
       "      <td>0</td>\n",
       "      <td>35</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>8.0500</td>\n",
       "      <td>S</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   Survived  Pclass  Sex  Age  SibSp  Parch     Fare Embarked  Title\n",
       "0         0       3    0   22      1      0   7.2500        S      1\n",
       "1         1       1    1   38      1      0  71.2833        C      3\n",
       "2         1       3    1   26      0      0   7.9250        S      2\n",
       "3         1       1    1   35      1      0  53.1000        S      3\n",
       "4         0       3    0   35      0      0   8.0500        S      1"
      ]
     },
     "execution_count": 29,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "for dataset in combine:\n",
    "    for i in range(0, 2):\n",
    "        for j in range(0, 3):\n",
    "            guess_df = dataset[(dataset['Sex'] == i) & \\\n",
    "                                  (dataset['Pclass'] == j+1)]['Age'].dropna()\n",
    "\n",
    "            # age_mean = guess_df.mean()\n",
    "            # age_std = guess_df.std()\n",
    "            # age_guess = rnd.uniform(age_mean - age_std, age_mean + age_std)\n",
    "\n",
    "            age_guess = guess_df.median()\n",
    "\n",
    "            # Convert random age float to nearest .5 age\n",
    "            guess_ages[i,j] = int( age_guess/0.5 + 0.5 ) * 0.5\n",
    "            \n",
    "    for i in range(0, 2):\n",
    "        for j in range(0, 3):\n",
    "            dataset.loc[ (dataset.Age.isnull()) & (dataset.Sex == i) & (dataset.Pclass == j+1),\\\n",
    "                    'Age'] = guess_ages[i,j]\n",
    "\n",
    "    dataset['Age'] = dataset['Age'].astype(int)\n",
    "\n",
    "train_df.head()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "_cell_guid": "dbe0a8bf-40bc-c581-e10e-76f07b3b71d4",
    "_uuid": "e7c52b44b703f28e4b6f4ddba67ab65f40274550"
   },
   "source": [
    "Let us create Age bands and determine correlations with Survived."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 30,
   "metadata": {
    "_cell_guid": "725d1c84-6323-9d70-5812-baf9994d3aa1",
    "_uuid": "5c8b4cbb302f439ef0d6278dcfbdafd952675353",
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>AgeBand</th>\n",
       "      <th>Survived</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>(-0.08, 16]</td>\n",
       "      <td>0.550000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>(16, 32]</td>\n",
       "      <td>0.337374</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>(32, 48]</td>\n",
       "      <td>0.412037</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>(48, 64]</td>\n",
       "      <td>0.434783</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>(64, 80]</td>\n",
       "      <td>0.090909</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "       AgeBand  Survived\n",
       "0  (-0.08, 16]  0.550000\n",
       "1     (16, 32]  0.337374\n",
       "2     (32, 48]  0.412037\n",
       "3     (48, 64]  0.434783\n",
       "4     (64, 80]  0.090909"
      ]
     },
     "execution_count": 30,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "train_df['AgeBand'] = pd.cut(train_df['Age'], 5)\n",
    "train_df[['AgeBand', 'Survived']].groupby(['AgeBand'], as_index=False).mean().sort_values(by='AgeBand', ascending=True)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "_cell_guid": "ba4be3a0-e524-9c57-fbec-c8ecc5cde5c6",
    "_uuid": "856392dd415ac14ab74a885a37d068fc7a58f3a5"
   },
   "source": [
    "Let us replace Age with ordinals based on these bands."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 31,
   "metadata": {
    "_cell_guid": "797b986d-2c45-a9ee-e5b5-088de817c8b2",
    "_uuid": "ee13831345f389db407c178f66c19cc8331445b0",
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Survived</th>\n",
       "      <th>Pclass</th>\n",
       "      <th>Sex</th>\n",
       "      <th>Age</th>\n",
       "      <th>SibSp</th>\n",
       "      <th>Parch</th>\n",
       "      <th>Fare</th>\n",
       "      <th>Embarked</th>\n",
       "      <th>Title</th>\n",
       "      <th>AgeBand</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>0</td>\n",
       "      <td>3</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>7.2500</td>\n",
       "      <td>S</td>\n",
       "      <td>1</td>\n",
       "      <td>(16, 32]</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>2</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>71.2833</td>\n",
       "      <td>C</td>\n",
       "      <td>3</td>\n",
       "      <td>(32, 48]</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>1</td>\n",
       "      <td>3</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>7.9250</td>\n",
       "      <td>S</td>\n",
       "      <td>2</td>\n",
       "      <td>(16, 32]</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>2</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>53.1000</td>\n",
       "      <td>S</td>\n",
       "      <td>3</td>\n",
       "      <td>(32, 48]</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>0</td>\n",
       "      <td>3</td>\n",
       "      <td>0</td>\n",
       "      <td>2</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>8.0500</td>\n",
       "      <td>S</td>\n",
       "      <td>1</td>\n",
       "      <td>(32, 48]</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   Survived  Pclass  Sex  Age  SibSp  Parch     Fare Embarked  Title   AgeBand\n",
       "0         0       3    0    1      1      0   7.2500        S      1  (16, 32]\n",
       "1         1       1    1    2      1      0  71.2833        C      3  (32, 48]\n",
       "2         1       3    1    1      0      0   7.9250        S      2  (16, 32]\n",
       "3         1       1    1    2      1      0  53.1000        S      3  (32, 48]\n",
       "4         0       3    0    2      0      0   8.0500        S      1  (32, 48]"
      ]
     },
     "execution_count": 31,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "for dataset in combine:    \n",
    "    dataset.loc[ dataset['Age'] <= 16, 'Age'] = 0\n",
    "    dataset.loc[(dataset['Age'] > 16) & (dataset['Age'] <= 32), 'Age'] = 1\n",
    "    dataset.loc[(dataset['Age'] > 32) & (dataset['Age'] <= 48), 'Age'] = 2\n",
    "    dataset.loc[(dataset['Age'] > 48) & (dataset['Age'] <= 64), 'Age'] = 3\n",
    "    dataset.loc[ dataset['Age'] > 64, 'Age']\n",
    "train_df.head()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "_cell_guid": "004568b6-dd9a-ff89-43d5-13d4e9370b1d",
    "_uuid": "8e3fbc95e0fd6600e28347567416d3f0d77a24cc"
   },
   "source": [
    "We can not remove the AgeBand feature."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 32,
   "metadata": {
    "_cell_guid": "875e55d4-51b0-5061-b72c-8a23946133a3",
    "_uuid": "1ea01ccc4a24e8951556d97c990aa0136da19721",
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Survived</th>\n",
       "      <th>Pclass</th>\n",
       "      <th>Sex</th>\n",
       "      <th>Age</th>\n",
       "      <th>SibSp</th>\n",
       "      <th>Parch</th>\n",
       "      <th>Fare</th>\n",
       "      <th>Embarked</th>\n",
       "      <th>Title</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>0</td>\n",
       "      <td>3</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>7.2500</td>\n",
       "      <td>S</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>2</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>71.2833</td>\n",
       "      <td>C</td>\n",
       "      <td>3</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>1</td>\n",
       "      <td>3</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>7.9250</td>\n",
       "      <td>S</td>\n",
       "      <td>2</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>2</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>53.1000</td>\n",
       "      <td>S</td>\n",
       "      <td>3</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>0</td>\n",
       "      <td>3</td>\n",
       "      <td>0</td>\n",
       "      <td>2</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>8.0500</td>\n",
       "      <td>S</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   Survived  Pclass  Sex  Age  SibSp  Parch     Fare Embarked  Title\n",
       "0         0       3    0    1      1      0   7.2500        S      1\n",
       "1         1       1    1    2      1      0  71.2833        C      3\n",
       "2         1       3    1    1      0      0   7.9250        S      2\n",
       "3         1       1    1    2      1      0  53.1000        S      3\n",
       "4         0       3    0    2      0      0   8.0500        S      1"
      ]
     },
     "execution_count": 32,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "train_df = train_df.drop(['AgeBand'], axis=1)\n",
    "combine = [train_df, test_df]\n",
    "train_df.head()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "_cell_guid": "1c237b76-d7ac-098f-0156-480a838a64a9",
    "_uuid": "e3d4a2040c053fbd0486c8cfc4fec3224bd3ebb3"
   },
   "source": [
    "### Create new feature combining existing features\n",
    "\n",
    "We can create a new feature for FamilySize which combines Parch and SibSp. This will enable us to drop Parch and SibSp from our datasets."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 33,
   "metadata": {
    "_cell_guid": "7e6c04ed-cfaa-3139-4378-574fd095d6ba",
    "_uuid": "33d1236ce4a8ab888b9fac2d5af1c78d174b32c7",
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>FamilySize</th>\n",
       "      <th>Survived</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>4</td>\n",
       "      <td>0.724138</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>3</td>\n",
       "      <td>0.578431</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>2</td>\n",
       "      <td>0.552795</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>6</th>\n",
       "      <td>7</td>\n",
       "      <td>0.333333</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>1</td>\n",
       "      <td>0.303538</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>5</td>\n",
       "      <td>0.200000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>6</td>\n",
       "      <td>0.136364</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>7</th>\n",
       "      <td>8</td>\n",
       "      <td>0.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>8</th>\n",
       "      <td>11</td>\n",
       "      <td>0.000000</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   FamilySize  Survived\n",
       "3           4  0.724138\n",
       "2           3  0.578431\n",
       "1           2  0.552795\n",
       "6           7  0.333333\n",
       "0           1  0.303538\n",
       "4           5  0.200000\n",
       "5           6  0.136364\n",
       "7           8  0.000000\n",
       "8          11  0.000000"
      ]
     },
     "execution_count": 33,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "for dataset in combine:\n",
    "    dataset['FamilySize'] = dataset['SibSp'] + dataset['Parch'] + 1\n",
    "\n",
    "train_df[['FamilySize', 'Survived']].groupby(['FamilySize'], as_index=False).mean().sort_values(by='Survived', ascending=False)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "_cell_guid": "842188e6-acf8-2476-ccec-9e3451e4fa86",
    "_uuid": "67f8e4474cd1ecf4261c153ce8b40ea23cf659e4"
   },
   "source": [
    "We can create another feature called IsAlone."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 34,
   "metadata": {
    "_cell_guid": "5c778c69-a9ae-1b6b-44fe-a0898d07be7a",
    "_uuid": "3b8db81cc3513b088c6bcd9cd1938156fe77992f",
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>IsAlone</th>\n",
       "      <th>Survived</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>0</td>\n",
       "      <td>0.505650</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>1</td>\n",
       "      <td>0.303538</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   IsAlone  Survived\n",
       "0        0  0.505650\n",
       "1        1  0.303538"
      ]
     },
     "execution_count": 34,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "for dataset in combine:\n",
    "    dataset['IsAlone'] = 0\n",
    "    dataset.loc[dataset['FamilySize'] == 1, 'IsAlone'] = 1\n",
    "\n",
    "train_df[['IsAlone', 'Survived']].groupby(['IsAlone'], as_index=False).mean()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "_cell_guid": "e6b87c09-e7b2-f098-5b04-4360080d26bc",
    "_uuid": "3da4204b2c78faa54a94bbad78a8aa85fbf90c87"
   },
   "source": [
    "Let us drop Parch, SibSp, and FamilySize features in favor of IsAlone."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 35,
   "metadata": {
    "_cell_guid": "74ee56a6-7357-f3bc-b605-6c41f8aa6566",
    "_uuid": "1e3479690ef7cd8ee10538d4f39d7117246887f0",
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Survived</th>\n",
       "      <th>Pclass</th>\n",
       "      <th>Sex</th>\n",
       "      <th>Age</th>\n",
       "      <th>Fare</th>\n",
       "      <th>Embarked</th>\n",
       "      <th>Title</th>\n",
       "      <th>IsAlone</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>0</td>\n",
       "      <td>3</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>7.2500</td>\n",
       "      <td>S</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>2</td>\n",
       "      <td>71.2833</td>\n",
       "      <td>C</td>\n",
       "      <td>3</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>1</td>\n",
       "      <td>3</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>7.9250</td>\n",
       "      <td>S</td>\n",
       "      <td>2</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>2</td>\n",
       "      <td>53.1000</td>\n",
       "      <td>S</td>\n",
       "      <td>3</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>0</td>\n",
       "      <td>3</td>\n",
       "      <td>0</td>\n",
       "      <td>2</td>\n",
       "      <td>8.0500</td>\n",
       "      <td>S</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   Survived  Pclass  Sex  Age     Fare Embarked  Title  IsAlone\n",
       "0         0       3    0    1   7.2500        S      1        0\n",
       "1         1       1    1    2  71.2833        C      3        0\n",
       "2         1       3    1    1   7.9250        S      2        1\n",
       "3         1       1    1    2  53.1000        S      3        0\n",
       "4         0       3    0    2   8.0500        S      1        1"
      ]
     },
     "execution_count": 35,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "train_df = train_df.drop(['Parch', 'SibSp', 'FamilySize'], axis=1)\n",
    "test_df = test_df.drop(['Parch', 'SibSp', 'FamilySize'], axis=1)\n",
    "combine = [train_df, test_df]\n",
    "\n",
    "train_df.head()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "_cell_guid": "f890b730-b1fe-919e-fb07-352fbd7edd44",
    "_uuid": "71b800ed96407eba05220f76a1288366a22ec887"
   },
   "source": [
    "We can also create an artificial feature combining Pclass and Age."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 36,
   "metadata": {
    "_cell_guid": "305402aa-1ea1-c245-c367-056eef8fe453",
    "_uuid": "aac2c5340c06210a8b0199e15461e9049fbf2cff",
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Age*Class</th>\n",
       "      <th>Age</th>\n",
       "      <th>Pclass</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>3</td>\n",
       "      <td>1</td>\n",
       "      <td>3</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>2</td>\n",
       "      <td>2</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>3</td>\n",
       "      <td>1</td>\n",
       "      <td>3</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>2</td>\n",
       "      <td>2</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>6</td>\n",
       "      <td>2</td>\n",
       "      <td>3</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>3</td>\n",
       "      <td>1</td>\n",
       "      <td>3</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>6</th>\n",
       "      <td>3</td>\n",
       "      <td>3</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>7</th>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>3</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>8</th>\n",
       "      <td>3</td>\n",
       "      <td>1</td>\n",
       "      <td>3</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>9</th>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>2</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   Age*Class  Age  Pclass\n",
       "0          3    1       3\n",
       "1          2    2       1\n",
       "2          3    1       3\n",
       "3          2    2       1\n",
       "4          6    2       3\n",
       "5          3    1       3\n",
       "6          3    3       1\n",
       "7          0    0       3\n",
       "8          3    1       3\n",
       "9          0    0       2"
      ]
     },
     "execution_count": 36,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "for dataset in combine:\n",
    "    dataset['Age*Class'] = dataset.Age * dataset.Pclass\n",
    "\n",
    "train_df.loc[:, ['Age*Class', 'Age', 'Pclass']].head(10)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "_cell_guid": "13292c1b-020d-d9aa-525c-941331bb996a",
    "_uuid": "8264cc5676db8cd3e0b3e3f078cbaa74fd585a3c"
   },
   "source": [
    "### Completing a categorical feature\n",
    "\n",
    "Embarked feature takes S, Q, C values based on port of embarkation. Our training dataset has two missing values. We simply fill these with the most common occurance."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 37,
   "metadata": {
    "_cell_guid": "bf351113-9b7f-ef56-7211-e8dd00665b18",
    "_uuid": "1e3f8af166f60a1b3125a6b046eff5fff02d63cf",
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "'S'"
      ]
     },
     "execution_count": 37,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "freq_port = train_df.Embarked.dropna().mode()[0]\n",
    "freq_port"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 38,
   "metadata": {
    "_cell_guid": "51c21fcc-f066-cd80-18c8-3d140be6cbae",
    "_uuid": "d85b5575fb45f25749298641f6a0a38803e1ff22",
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Embarked</th>\n",
       "      <th>Survived</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>C</td>\n",
       "      <td>0.553571</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>Q</td>\n",
       "      <td>0.389610</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>S</td>\n",
       "      <td>0.339009</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "  Embarked  Survived\n",
       "0        C  0.553571\n",
       "1        Q  0.389610\n",
       "2        S  0.339009"
      ]
     },
     "execution_count": 38,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "for dataset in combine:\n",
    "    dataset['Embarked'] = dataset['Embarked'].fillna(freq_port)\n",
    "    \n",
    "train_df[['Embarked', 'Survived']].groupby(['Embarked'], as_index=False).mean().sort_values(by='Survived', ascending=False)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "_cell_guid": "f6acf7b2-0db3-e583-de50-7e14b495de34",
    "_uuid": "d8830e997995145314328b6218b5606df04499b0"
   },
   "source": [
    "### Converting categorical feature to numeric\n",
    "\n",
    "We can now convert the EmbarkedFill feature by creating a new numeric Port feature."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 39,
   "metadata": {
    "_cell_guid": "89a91d76-2cc0-9bbb-c5c5-3c9ecae33c66",
    "_uuid": "e480a1ef145de0b023821134896391d568a6f4f9",
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Survived</th>\n",
       "      <th>Pclass</th>\n",
       "      <th>Sex</th>\n",
       "      <th>Age</th>\n",
       "      <th>Fare</th>\n",
       "      <th>Embarked</th>\n",
       "      <th>Title</th>\n",
       "      <th>IsAlone</th>\n",
       "      <th>Age*Class</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>0</td>\n",
       "      <td>3</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>7.2500</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>3</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>2</td>\n",
       "      <td>71.2833</td>\n",
       "      <td>1</td>\n",
       "      <td>3</td>\n",
       "      <td>0</td>\n",
       "      <td>2</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>1</td>\n",
       "      <td>3</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>7.9250</td>\n",
       "      <td>0</td>\n",
       "      <td>2</td>\n",
       "      <td>1</td>\n",
       "      <td>3</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>2</td>\n",
       "      <td>53.1000</td>\n",
       "      <td>0</td>\n",
       "      <td>3</td>\n",
       "      <td>0</td>\n",
       "      <td>2</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>0</td>\n",
       "      <td>3</td>\n",
       "      <td>0</td>\n",
       "      <td>2</td>\n",
       "      <td>8.0500</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>6</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   Survived  Pclass  Sex  Age     Fare  Embarked  Title  IsAlone  Age*Class\n",
       "0         0       3    0    1   7.2500         0      1        0          3\n",
       "1         1       1    1    2  71.2833         1      3        0          2\n",
       "2         1       3    1    1   7.9250         0      2        1          3\n",
       "3         1       1    1    2  53.1000         0      3        0          2\n",
       "4         0       3    0    2   8.0500         0      1        1          6"
      ]
     },
     "execution_count": 39,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "for dataset in combine:\n",
    "    dataset['Embarked'] = dataset['Embarked'].map( {'S': 0, 'C': 1, 'Q': 2} ).astype(int)\n",
    "\n",
    "train_df.head()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "_cell_guid": "e3dfc817-e1c1-a274-a111-62c1c814cecf",
    "_uuid": "d79834ebc4ab9d48ed404584711475dbf8611b91"
   },
   "source": [
    "### Quick completing and converting a numeric feature\n",
    "\n",
    "We can now complete the Fare feature for single missing value in test dataset using mode to get the value that occurs most frequently for this feature. We do this in a single line of code.\n",
    "\n",
    "Note that we are not creating an intermediate new feature or doing any further analysis for correlation to guess missing feature as we are replacing only a single value. The completion goal achieves desired requirement for model algorithm to operate on non-null values.\n",
    "\n",
    "We may also want round off the fare to two decimals as it represents currency."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 40,
   "metadata": {
    "_cell_guid": "3600cb86-cf5f-d87b-1b33-638dc8db1564",
    "_uuid": "aacb62f3526072a84795a178bd59222378bab180",
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>PassengerId</th>\n",
       "      <th>Pclass</th>\n",
       "      <th>Sex</th>\n",
       "      <th>Age</th>\n",
       "      <th>Fare</th>\n",
       "      <th>Embarked</th>\n",
       "      <th>Title</th>\n",
       "      <th>IsAlone</th>\n",
       "      <th>Age*Class</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>892</td>\n",
       "      <td>3</td>\n",
       "      <td>0</td>\n",
       "      <td>2</td>\n",
       "      <td>7.8292</td>\n",
       "      <td>2</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>6</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>893</td>\n",
       "      <td>3</td>\n",
       "      <td>1</td>\n",
       "      <td>2</td>\n",
       "      <td>7.0000</td>\n",
       "      <td>0</td>\n",
       "      <td>3</td>\n",
       "      <td>0</td>\n",
       "      <td>6</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>894</td>\n",
       "      <td>2</td>\n",
       "      <td>0</td>\n",
       "      <td>3</td>\n",
       "      <td>9.6875</td>\n",
       "      <td>2</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>6</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>895</td>\n",
       "      <td>3</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>8.6625</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>3</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>896</td>\n",
       "      <td>3</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>12.2875</td>\n",
       "      <td>0</td>\n",
       "      <td>3</td>\n",
       "      <td>0</td>\n",
       "      <td>3</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   PassengerId  Pclass  Sex  Age     Fare  Embarked  Title  IsAlone  Age*Class\n",
       "0          892       3    0    2   7.8292         2      1        1          6\n",
       "1          893       3    1    2   7.0000         0      3        0          6\n",
       "2          894       2    0    3   9.6875         2      1        1          6\n",
       "3          895       3    0    1   8.6625         0      1        1          3\n",
       "4          896       3    1    1  12.2875         0      3        0          3"
      ]
     },
     "execution_count": 40,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "test_df['Fare'].fillna(test_df['Fare'].dropna().median(), inplace=True)\n",
    "test_df.head()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "_cell_guid": "4b816bc7-d1fb-c02b-ed1d-ee34b819497d",
    "_uuid": "3466d98e83899d8b38a36ede794c68c5656f48e6"
   },
   "source": [
    "We can not create FareBand."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 41,
   "metadata": {
    "_cell_guid": "0e9018b1-ced5-9999-8ce1-258a0952cbf2",
    "_uuid": "b9a78f6b4c72520d4ad99d2c89c84c591216098d",
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>FareBand</th>\n",
       "      <th>Survived</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>[0, 7.91]</td>\n",
       "      <td>0.197309</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>(7.91, 14.454]</td>\n",
       "      <td>0.303571</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>(14.454, 31]</td>\n",
       "      <td>0.454955</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>(31, 512.329]</td>\n",
       "      <td>0.581081</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "         FareBand  Survived\n",
       "0       [0, 7.91]  0.197309\n",
       "1  (7.91, 14.454]  0.303571\n",
       "2    (14.454, 31]  0.454955\n",
       "3   (31, 512.329]  0.581081"
      ]
     },
     "execution_count": 41,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "train_df['FareBand'] = pd.qcut(train_df['Fare'], 4)\n",
    "train_df[['FareBand', 'Survived']].groupby(['FareBand'], as_index=False).mean().sort_values(by='FareBand', ascending=True)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "_cell_guid": "d65901a5-3684-6869-e904-5f1a7cce8a6d",
    "_uuid": "89400fba71af02d09ff07adf399fb36ac4913db6"
   },
   "source": [
    "Convert the Fare feature to ordinal values based on the FareBand."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 42,
   "metadata": {
    "_cell_guid": "385f217a-4e00-76dc-1570-1de4eec0c29c",
    "_uuid": "640f305061ec4221a45ba250f8d54bb391035a57",
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Survived</th>\n",
       "      <th>Pclass</th>\n",
       "      <th>Sex</th>\n",
       "      <th>Age</th>\n",
       "      <th>Fare</th>\n",
       "      <th>Embarked</th>\n",
       "      <th>Title</th>\n",
       "      <th>IsAlone</th>\n",
       "      <th>Age*Class</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>0</td>\n",
       "      <td>3</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>3</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>2</td>\n",
       "      <td>3</td>\n",
       "      <td>1</td>\n",
       "      <td>3</td>\n",
       "      <td>0</td>\n",
       "      <td>2</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>1</td>\n",
       "      <td>3</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>2</td>\n",
       "      <td>1</td>\n",
       "      <td>3</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>2</td>\n",
       "      <td>3</td>\n",
       "      <td>0</td>\n",
       "      <td>3</td>\n",
       "      <td>0</td>\n",
       "      <td>2</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>0</td>\n",
       "      <td>3</td>\n",
       "      <td>0</td>\n",
       "      <td>2</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>6</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>0</td>\n",
       "      <td>3</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>2</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>3</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>6</th>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>3</td>\n",
       "      <td>3</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>3</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>7</th>\n",
       "      <td>0</td>\n",
       "      <td>3</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>2</td>\n",
       "      <td>0</td>\n",
       "      <td>4</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>8</th>\n",
       "      <td>1</td>\n",
       "      <td>3</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>3</td>\n",
       "      <td>0</td>\n",
       "      <td>3</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>9</th>\n",
       "      <td>1</td>\n",
       "      <td>2</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>2</td>\n",
       "      <td>1</td>\n",
       "      <td>3</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   Survived  Pclass  Sex  Age  Fare  Embarked  Title  IsAlone  Age*Class\n",
       "0         0       3    0    1     0         0      1        0          3\n",
       "1         1       1    1    2     3         1      3        0          2\n",
       "2         1       3    1    1     1         0      2        1          3\n",
       "3         1       1    1    2     3         0      3        0          2\n",
       "4         0       3    0    2     1         0      1        1          6\n",
       "5         0       3    0    1     1         2      1        1          3\n",
       "6         0       1    0    3     3         0      1        1          3\n",
       "7         0       3    0    0     2         0      4        0          0\n",
       "8         1       3    1    1     1         0      3        0          3\n",
       "9         1       2    1    0     2         1      3        0          0"
      ]
     },
     "execution_count": 42,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "for dataset in combine:\n",
    "    dataset.loc[ dataset['Fare'] <= 7.91, 'Fare'] = 0\n",
    "    dataset.loc[(dataset['Fare'] > 7.91) & (dataset['Fare'] <= 14.454), 'Fare'] = 1\n",
    "    dataset.loc[(dataset['Fare'] > 14.454) & (dataset['Fare'] <= 31), 'Fare']   = 2\n",
    "    dataset.loc[ dataset['Fare'] > 31, 'Fare'] = 3\n",
    "    dataset['Fare'] = dataset['Fare'].astype(int)\n",
    "\n",
    "train_df = train_df.drop(['FareBand'], axis=1)\n",
    "combine = [train_df, test_df]\n",
    "    \n",
    "train_df.head(10)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "_cell_guid": "27272bb9-3c64-4f9a-4a3b-54f02e1c8289",
    "_uuid": "531994ed95a3002d1759ceb74d9396db706a41e2"
   },
   "source": [
    "And the test dataset."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 43,
   "metadata": {
    "_cell_guid": "d2334d33-4fe5-964d-beac-6aa620066e15",
    "_uuid": "8453cecad81fcc44de3f4e4e4c3ce6afa977740d",
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>PassengerId</th>\n",
       "      <th>Pclass</th>\n",
       "      <th>Sex</th>\n",
       "      <th>Age</th>\n",
       "      <th>Fare</th>\n",
       "      <th>Embarked</th>\n",
       "      <th>Title</th>\n",
       "      <th>IsAlone</th>\n",
       "      <th>Age*Class</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>892</td>\n",
       "      <td>3</td>\n",
       "      <td>0</td>\n",
       "      <td>2</td>\n",
       "      <td>0</td>\n",
       "      <td>2</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>6</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>893</td>\n",
       "      <td>3</td>\n",
       "      <td>1</td>\n",
       "      <td>2</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>3</td>\n",
       "      <td>0</td>\n",
       "      <td>6</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>894</td>\n",
       "      <td>2</td>\n",
       "      <td>0</td>\n",
       "      <td>3</td>\n",
       "      <td>1</td>\n",
       "      <td>2</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>6</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>895</td>\n",
       "      <td>3</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>3</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>896</td>\n",
       "      <td>3</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>3</td>\n",
       "      <td>0</td>\n",
       "      <td>3</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>897</td>\n",
       "      <td>3</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>6</th>\n",
       "      <td>898</td>\n",
       "      <td>3</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>2</td>\n",
       "      <td>2</td>\n",
       "      <td>1</td>\n",
       "      <td>3</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>7</th>\n",
       "      <td>899</td>\n",
       "      <td>2</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>2</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>2</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>8</th>\n",
       "      <td>900</td>\n",
       "      <td>3</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>3</td>\n",
       "      <td>1</td>\n",
       "      <td>3</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>9</th>\n",
       "      <td>901</td>\n",
       "      <td>3</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>2</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>3</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   PassengerId  Pclass  Sex  Age  Fare  Embarked  Title  IsAlone  Age*Class\n",
       "0          892       3    0    2     0         2      1        1          6\n",
       "1          893       3    1    2     0         0      3        0          6\n",
       "2          894       2    0    3     1         2      1        1          6\n",
       "3          895       3    0    1     1         0      1        1          3\n",
       "4          896       3    1    1     1         0      3        0          3\n",
       "5          897       3    0    0     1         0      1        1          0\n",
       "6          898       3    1    1     0         2      2        1          3\n",
       "7          899       2    0    1     2         0      1        0          2\n",
       "8          900       3    1    1     0         1      3        1          3\n",
       "9          901       3    0    1     2         0      1        0          3"
      ]
     },
     "execution_count": 43,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "test_df.head(10)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "_cell_guid": "69783c08-c8cc-a6ca-2a9a-5e75581c6d31",
    "_uuid": "a55f20dd6654610ff2d66c1bf3e4c6c73dcef9e5"
   },
   "source": [
    "## Model, predict and solve\n",
    "\n",
    "Now we are ready to train a model and predict the required solution. There are 60+ predictive modelling algorithms to choose from. We must understand the type of problem and solution requirement to narrow down to a select few models which we can evaluate. Our problem is a classification and regression problem. We want to identify relationship between output (Survived or not) with other variables or features (Gender, Age, Port...). We are also perfoming a category of machine learning which is called supervised learning as we are training our model with a given dataset. With these two criteria - Supervised Learning plus Classification and Regression, we can narrow down our choice of models to a few. These include:\n",
    "\n",
    "- Logistic Regression\n",
    "- KNN or k-Nearest Neighbors\n",
    "- Support Vector Machines\n",
    "- Naive Bayes classifier\n",
    "- Decision Tree\n",
    "- Random Forrest\n",
    "- Perceptron\n",
    "- Artificial neural network\n",
    "- RVM or Relevance Vector Machine"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 44,
   "metadata": {
    "_cell_guid": "0acf54f9-6cf5-24b5-72d9-29b30052823a",
    "_uuid": "04d2235855f40cffd81f76b977a500fceaae87ad",
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "((891, 8), (891,), (418, 8))"
      ]
     },
     "execution_count": 44,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "X_train = train_df.drop(\"Survived\", axis=1)\n",
    "Y_train = train_df[\"Survived\"]\n",
    "X_test  = test_df.drop(\"PassengerId\", axis=1).copy()\n",
    "X_train.shape, Y_train.shape, X_test.shape"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "_cell_guid": "579bc004-926a-bcfe-e9bb-c8df83356876",
    "_uuid": "782903c09ec9ee4b6f3e03f7c8b5a62c00461deb"
   },
   "source": [
    "Logistic Regression is a useful model to run early in the workflow. Logistic regression measures the relationship between the categorical dependent variable (feature) and one or more independent variables (features) by estimating probabilities using a logistic function, which is the cumulative logistic distribution. Reference [Wikipedia](https://en.wikipedia.org/wiki/Logistic_regression).\n",
    "\n",
    "Note the confidence score generated by the model based on our training dataset."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 45,
   "metadata": {
    "_cell_guid": "0edd9322-db0b-9c37-172d-a3a4f8dec229",
    "_uuid": "a649b9c53f4c7b40694f60f5c8dc14ec5ef519ec",
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "80.36"
      ]
     },
     "execution_count": 45,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# Logistic Regression\n",
    "\n",
    "logreg = LogisticRegression()\n",
    "logreg.fit(X_train, Y_train)\n",
    "Y_pred = logreg.predict(X_test)\n",
    "acc_log = round(logreg.score(X_train, Y_train) * 100, 2)\n",
    "acc_log"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "_cell_guid": "3af439ae-1f04-9236-cdc2-ec8170a0d4ee",
    "_uuid": "180e27c96c821656a84889f73986c6ddfff51ed3"
   },
   "source": [
    "We can use Logistic Regression to validate our assumptions and decisions for feature creating and completing goals. This can be done by calculating the coefficient of the features in the decision function.\n",
    "\n",
    "Positive coefficients increase the log-odds of the response (and thus increase the probability), and negative coefficients decrease the log-odds of the response (and thus decrease the probability).\n",
    "\n",
    "- Sex is highest positivie coefficient, implying as the Sex value increases (male: 0 to female: 1), the probability of Survived=1 increases the most.\n",
    "- Inversely as Pclass increases, probability of Survived=1 decreases the most.\n",
    "- This way Age*Class is a good artificial feature to model as it has second highest negative correlation with Survived.\n",
    "- So is Title as second highest positive correlation."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 46,
   "metadata": {
    "_cell_guid": "e545d5aa-4767-7a41-5799-a4c5e529ce72",
    "_uuid": "6e6f58053fae405fc93d312fc999f3904e708dbe",
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Feature</th>\n",
       "      <th>Correlation</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>Sex</td>\n",
       "      <td>2.201527</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>Title</td>\n",
       "      <td>0.398234</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>Age</td>\n",
       "      <td>0.287165</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>Embarked</td>\n",
       "      <td>0.261762</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>6</th>\n",
       "      <td>IsAlone</td>\n",
       "      <td>0.129140</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>Fare</td>\n",
       "      <td>-0.085150</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>7</th>\n",
       "      <td>Age*Class</td>\n",
       "      <td>-0.311199</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>Pclass</td>\n",
       "      <td>-0.749006</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "     Feature  Correlation\n",
       "1        Sex     2.201527\n",
       "5      Title     0.398234\n",
       "2        Age     0.287165\n",
       "4   Embarked     0.261762\n",
       "6    IsAlone     0.129140\n",
       "3       Fare    -0.085150\n",
       "7  Age*Class    -0.311199\n",
       "0     Pclass    -0.749006"
      ]
     },
     "execution_count": 46,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "coeff_df = pd.DataFrame(train_df.columns.delete(0))\n",
    "coeff_df.columns = ['Feature']\n",
    "coeff_df[\"Correlation\"] = pd.Series(logreg.coef_[0])\n",
    "\n",
    "coeff_df.sort_values(by='Correlation', ascending=False)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "_cell_guid": "ac041064-1693-8584-156b-66674117e4d0",
    "_uuid": "ccba9ac0a9c3c648ef9bc778977ab99066ab3945"
   },
   "source": [
    "Next we model using Support Vector Machines which are supervised learning models with associated learning algorithms that analyze data used for classification and regression analysis. Given a set of training samples, each marked as belonging to one or the other of **two categories**, an SVM training algorithm builds a model that assigns new test samples to one category or the other, making it a non-probabilistic binary linear classifier. Reference [Wikipedia](https://en.wikipedia.org/wiki/Support_vector_machine).\n",
    "\n",
    "Note that the model generates a confidence score which is higher than Logistics Regression model."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 47,
   "metadata": {
    "_cell_guid": "7a63bf04-a410-9c81-5310-bdef7963298f",
    "_uuid": "60039d5377da49f1aa9ac4a924331328bd69add1",
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "83.84"
      ]
     },
     "execution_count": 47,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# Support Vector Machines\n",
    "\n",
    "svc = SVC()\n",
    "svc.fit(X_train, Y_train)\n",
    "Y_pred = svc.predict(X_test)\n",
    "acc_svc = round(svc.score(X_train, Y_train) * 100, 2)\n",
    "acc_svc"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "_cell_guid": "172a6286-d495-5ac4-1a9c-5b77b74ca6d2",
    "_uuid": "bb3ed027c45664148b61e3aa5e2ca8111aac8793"
   },
   "source": [
    "In pattern recognition, the k-Nearest Neighbors algorithm (or k-NN for short) is a non-parametric method used for classification and regression. A sample is classified by a majority vote of its neighbors, with the sample being assigned to the class most common among its k nearest neighbors (k is a positive integer, typically small). If k = 1, then the object is simply assigned to the class of that single nearest neighbor. Reference [Wikipedia](https://en.wikipedia.org/wiki/K-nearest_neighbors_algorithm).\n",
    "\n",
    "KNN confidence score is better than Logistics Regression but worse than SVM."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 48,
   "metadata": {
    "_cell_guid": "ca14ae53-f05e-eb73-201c-064d7c3ed610",
    "_uuid": "54d86cd45703d459d452f89572771deaa8877999",
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "84.74"
      ]
     },
     "execution_count": 48,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "knn = KNeighborsClassifier(n_neighbors = 3)\n",
    "knn.fit(X_train, Y_train)\n",
    "Y_pred = knn.predict(X_test)\n",
    "acc_knn = round(knn.score(X_train, Y_train) * 100, 2)\n",
    "acc_knn"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "_cell_guid": "810f723d-2313-8dfd-e3e2-26673b9caa90",
    "_uuid": "1535f18113f851e480cd53e0c612dc05835690f3"
   },
   "source": [
    "In machine learning, naive Bayes classifiers are a family of simple probabilistic classifiers based on applying Bayes' theorem with strong (naive) independence assumptions between the features. Naive Bayes classifiers are highly scalable, requiring a number of parameters linear in the number of variables (features) in a learning problem. Reference [Wikipedia](https://en.wikipedia.org/wiki/Naive_Bayes_classifier).\n",
    "\n",
    "The model generated confidence score is the lowest among the models evaluated so far."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 49,
   "metadata": {
    "_cell_guid": "50378071-7043-ed8d-a782-70c947520dae",
    "_uuid": "723c835c29e8727bc9bad4b564731f2ca98025d0",
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "72.28"
      ]
     },
     "execution_count": 49,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# Gaussian Naive Bayes\n",
    "\n",
    "gaussian = GaussianNB()\n",
    "gaussian.fit(X_train, Y_train)\n",
    "Y_pred = gaussian.predict(X_test)\n",
    "acc_gaussian = round(gaussian.score(X_train, Y_train) * 100, 2)\n",
    "acc_gaussian"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "_cell_guid": "1e286e19-b714-385a-fcfa-8cf5ec19956a",
    "_uuid": "df148bf93e11c9ec2c97162d5c0c0605b75d9334"
   },
   "source": [
    "The perceptron is an algorithm for supervised learning of binary classifiers (functions that can decide whether an input, represented by a vector of numbers, belongs to some specific class or not). It is a type of linear classifier, i.e. a classification algorithm that makes its predictions based on a linear predictor function combining a set of weights with the feature vector. The algorithm allows for online learning, in that it processes elements in the training set one at a time. Reference [Wikipedia](https://en.wikipedia.org/wiki/Perceptron)."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 50,
   "metadata": {
    "_cell_guid": "ccc22a86-b7cb-c2dd-74bd-53b218d6ed0d",
    "_uuid": "c19d08949f9c3a26931e28adedc848b4deaa8ab6",
    "collapsed": false
   },
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "/Users/admin/anaconda/lib/python2.7/site-packages/sklearn/linear_model/stochastic_gradient.py:128: FutureWarning: max_iter and tol parameters have been added in <class 'sklearn.linear_model.perceptron.Perceptron'> in 0.19. If both are left unset, they default to max_iter=5 and tol=None. If tol is not None, max_iter defaults to max_iter=1000. From 0.21, default max_iter will be 1000, and default tol will be 1e-3.\n",
      "  \"and default tol will be 1e-3.\" % type(self), FutureWarning)\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "78.0"
      ]
     },
     "execution_count": 50,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# Perceptron\n",
    "\n",
    "perceptron = Perceptron()\n",
    "perceptron.fit(X_train, Y_train)\n",
    "Y_pred = perceptron.predict(X_test)\n",
    "acc_perceptron = round(perceptron.score(X_train, Y_train) * 100, 2)\n",
    "acc_perceptron"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 51,
   "metadata": {
    "_cell_guid": "a4d56857-9432-55bb-14c0-52ebeb64d198",
    "_uuid": "52ea4f44dd626448dd2199cb284b592670b1394b",
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "79.12"
      ]
     },
     "execution_count": 51,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# Linear SVC\n",
    "\n",
    "linear_svc = LinearSVC()\n",
    "linear_svc.fit(X_train, Y_train)\n",
    "Y_pred = linear_svc.predict(X_test)\n",
    "acc_linear_svc = round(linear_svc.score(X_train, Y_train) * 100, 2)\n",
    "acc_linear_svc"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 52,
   "metadata": {
    "_cell_guid": "dc98ed72-3aeb-861f-804d-b6e3d178bf4b",
    "_uuid": "3a016c1f24da59c85648204302d61ea15920e740",
    "collapsed": false
   },
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "/Users/admin/anaconda/lib/python2.7/site-packages/sklearn/linear_model/stochastic_gradient.py:128: FutureWarning: max_iter and tol parameters have been added in <class 'sklearn.linear_model.stochastic_gradient.SGDClassifier'> in 0.19. If both are left unset, they default to max_iter=5 and tol=None. If tol is not None, max_iter defaults to max_iter=1000. From 0.21, default max_iter will be 1000, and default tol will be 1e-3.\n",
      "  \"and default tol will be 1e-3.\" % type(self), FutureWarning)\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "76.54"
      ]
     },
     "execution_count": 52,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# Stochastic Gradient Descent\n",
    "\n",
    "sgd = SGDClassifier()\n",
    "sgd.fit(X_train, Y_train)\n",
    "Y_pred = sgd.predict(X_test)\n",
    "acc_sgd = round(sgd.score(X_train, Y_train) * 100, 2)\n",
    "acc_sgd"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "_cell_guid": "bae7f8d7-9da0-f4fd-bdb1-d97e719a18d7",
    "_uuid": "1c70e99920ae34adce03aaef38d61e2b83ff6a9c"
   },
   "source": [
    "This model uses a decision tree as a predictive model which maps features (tree branches) to conclusions about the target value (tree leaves). Tree models where the target variable can take a finite set of values are called classification trees; in these tree structures, leaves represent class labels and branches represent conjunctions of features that lead to those class labels. Decision trees where the target variable can take continuous values (typically real numbers) are called regression trees. Reference [Wikipedia](https://en.wikipedia.org/wiki/Decision_tree_learning).\n",
    "\n",
    "The model confidence score is the highest among models evaluated so far."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 53,
   "metadata": {
    "_cell_guid": "dd85f2b7-ace2-0306-b4ec-79c68cd3fea0",
    "_uuid": "1f94308b23b934123c03067e84027b507b989e52",
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "86.76"
      ]
     },
     "execution_count": 53,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# Decision Tree\n",
    "\n",
    "decision_tree = DecisionTreeClassifier()\n",
    "decision_tree.fit(X_train, Y_train)\n",
    "Y_pred = decision_tree.predict(X_test)\n",
    "acc_decision_tree = round(decision_tree.score(X_train, Y_train) * 100, 2)\n",
    "acc_decision_tree"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "_cell_guid": "85693668-0cd5-4319-7768-eddb62d2b7d0",
    "_uuid": "24f4e46f202a858076be91752170cad52aa9aefa"
   },
   "source": [
    "The next model Random Forests is one of the most popular. Random forests or random decision forests are an ensemble learning method for classification, regression and other tasks, that operate by constructing a multitude of decision trees (n_estimators=100) at training time and outputting the class that is the mode of the classes (classification) or mean prediction (regression) of the individual trees. Reference [Wikipedia](https://en.wikipedia.org/wiki/Random_forest).\n",
    "\n",
    "The model confidence score is the highest among models evaluated so far. We decide to use this model's output (Y_pred) for creating our competition submission of results."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 54,
   "metadata": {
    "_cell_guid": "f0694a8e-b618-8ed9-6f0d-8c6fba2c4567",
    "_uuid": "483c647d2759a2703d20785a44f51b6dee47d0db",
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "86.76"
      ]
     },
     "execution_count": 54,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# Random Forest\n",
    "\n",
    "random_forest = RandomForestClassifier(n_estimators=100)\n",
    "random_forest.fit(X_train, Y_train)\n",
    "Y_pred = random_forest.predict(X_test)\n",
    "random_forest.score(X_train, Y_train)\n",
    "acc_random_forest = round(random_forest.score(X_train, Y_train) * 100, 2)\n",
    "acc_random_forest"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "_cell_guid": "f6c9eef8-83dd-581c-2d8e-ce932fe3a44d",
    "_uuid": "2c1428d022430ea594af983a433757e11b47c50c"
   },
   "source": [
    "### Model evaluation\n",
    "\n",
    "We can now rank our evaluation of all the models to choose the best one for our problem. While both Decision Tree and Random Forest score the same, we choose to use Random Forest as they correct for decision trees' habit of overfitting to their training set. "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 55,
   "metadata": {
    "_cell_guid": "1f3cebe0-31af-70b2-1ce4-0fd406bcdfc6",
    "_uuid": "06a52babe50e0dd837b553c78fc73872168e1c7d",
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Model</th>\n",
       "      <th>Score</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>Random Forest</td>\n",
       "      <td>86.76</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>8</th>\n",
       "      <td>Decision Tree</td>\n",
       "      <td>86.76</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>KNN</td>\n",
       "      <td>84.74</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>Support Vector Machines</td>\n",
       "      <td>83.84</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>Logistic Regression</td>\n",
       "      <td>80.36</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>7</th>\n",
       "      <td>Linear SVC</td>\n",
       "      <td>79.12</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>Perceptron</td>\n",
       "      <td>78.00</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>6</th>\n",
       "      <td>Stochastic Gradient Decent</td>\n",
       "      <td>76.54</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>Naive Bayes</td>\n",
       "      <td>72.28</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "                        Model  Score\n",
       "3               Random Forest  86.76\n",
       "8               Decision Tree  86.76\n",
       "1                         KNN  84.74\n",
       "0     Support Vector Machines  83.84\n",
       "2         Logistic Regression  80.36\n",
       "7                  Linear SVC  79.12\n",
       "5                  Perceptron  78.00\n",
       "6  Stochastic Gradient Decent  76.54\n",
       "4                 Naive Bayes  72.28"
      ]
     },
     "execution_count": 55,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "models = pd.DataFrame({\n",
    "    'Model': ['Support Vector Machines', 'KNN', 'Logistic Regression', \n",
    "              'Random Forest', 'Naive Bayes', 'Perceptron', \n",
    "              'Stochastic Gradient Decent', 'Linear SVC', \n",
    "              'Decision Tree'],\n",
    "    'Score': [acc_svc, acc_knn, acc_log, \n",
    "              acc_random_forest, acc_gaussian, acc_perceptron, \n",
    "              acc_sgd, acc_linear_svc, acc_decision_tree]})\n",
    "models.sort_values(by='Score', ascending=False)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 58,
   "metadata": {
    "_cell_guid": "28854d36-051f-3ef0-5535-fa5ba6a9bef7",
    "_uuid": "82b31ea933b3026bd038a8370d651efdcdb3e4d7",
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "submission = pd.DataFrame({\n",
    "        \"PassengerId\": test_df[\"PassengerId\"],\n",
    "        \"Survived\": Y_pred\n",
    "    })\n",
    "submission.to_csv('predict.csv')\n",
    "# submission.to_csv('../output/submission.csv', index=False)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "_cell_guid": "fcfc8d9f-e955-cf70-5843-1fb764c54699",
    "_uuid": "0523a03b329df58c33ed672e5fb6cd2c9af1cae3"
   },
   "source": [
    "Our submission to the competition site Kaggle results in scoring 3,883 of 6,082 competition entries. This result is indicative while the competition is running. This result only accounts for part of the submission dataset. Not bad for our first attempt. Any suggestions to improve our score are most welcome."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "_cell_guid": "aeec9210-f9d8-cd7c-c4cf-a87376d5f693",
    "_uuid": "cdae56d6adbfb15ff9c491c645ae46e2c91d75ce"
   },
   "source": [
    "## References\n",
    "\n",
    "This notebook has been created based on great work done solving the Titanic competition and other sources.\n",
    "\n",
    "- [A journey through Titanic](https://www.kaggle.com/omarelgabry/titanic/a-journey-through-titanic)\n",
    "- [Getting Started with Pandas: Kaggle's Titanic Competition](https://www.kaggle.com/c/titanic/details/getting-started-with-random-forests)\n",
    "- [Titanic Best Working Classifier](https://www.kaggle.com/sinakhorami/titanic/titanic-best-working-classifier)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "_change_revision": 0,
  "_is_fork": false,
  "anaconda-cloud": {},
  "kernelspec": {
   "display_name": "Python [default]",
   "language": "python",
   "name": "python2"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 2
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython2",
   "version": "2.7.12"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 1
}
